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); }