【LeeCode】 Word Break
Given a non-empty string s and a dictionary wordDict consraining list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
Note:
- The same word in the dictionary may be reused multiple times in the segmentation.
- You may assume the dictionary does not contain duplicate words.
(1) Enumeration and Stamp Travel
public boolean wordBreak(String s, List<String> wordDict) {
int r = s.length()-1;
int[] flag = new int[s.length()];
for(int l=s.length() - 1;l>=0;l--){
if(wordDict.contains(s.substring(l, r+1))){
flag[l] = 1;
}
while(r>l){
if(flag[r] == 1){
if(wordDict.contains(s.substring(l, r))){
flag[l] = 1;
}
}
r--;
}
r = s.length() - 1;
}
return flag[0] == 1;
}
(2) Dynamic Programmer
public boolean wordBreak(String s, List<String> wordDict) {
int[] flag = new int[s.length()+1];
flag[0] = 1;
for(int i=1;i<=s.length();i++){
for(int j=0;j<i;j++){
if(flag[j] == 1 && wordDict.contains(s.substring(j, i))){
flag[i] = 1;
break;
}
}
}
return flag[s.length()] == 1;
}