139单词拆分

题目

https://leetcode-cn.com/problems/word-break/数组

分析

1. 字符串S = {s1,s2,s3,s4...sn}app

  字典set = {S1,S2,S3....Sn}spa

2.  子问题划分code

  S = S1 + S2 blog

    S1 = S11 +S12leetcode

    S2 = S21 + S22字符串

  若是S1被包含在字典中,而且S2也被包含在字典中,则S是可拆分的get

3.  边界string

  S1 == S 也就是说 S2 = NULLclass

 

4.  程序:

  设置一个Boolean数组,存储第i个字母开头的字符串是不是可拆分的

  例:“appledog”   {"app","apple","dog"}

  

    public boolean helper(String s,Set<String> set,int start,Boolean[] mem){
        if(start == s.length()){
            return true;
        }
        if(mem[start] != null){
            return mem[start];
        }
        for(int end = start + 1; end <= s.length(); end++){
            if(set.contains(s.substring(start,end)) && helper(s,set,end,mem)){
                mem[start] = true;
                return true;
            }
        }
        mem[start] = false;
        return false;

    }
    public boolean wordBreak(String s, List<String> wordDict) {
        Set<String> set = new HashSet<String>(wordDict);
        Boolean[] mem = new Boolean[s.length()];
        return helper(s,set,0,mem);
    }
相关文章
相关标签/搜索