Problem 139: Word Break
Last updated
Last updated
public class Solution {
public boolean wordBreak(String s, Set<String> wordDict) {
if (s == null || s.length() == 0) {
return true;
}
int maxLength = getMaxLength(wordDict);
// 动态规划的数组的 size 通常要加 1,因为之前有个 base
boolean[] canSegment = new boolean[s.length() + 1];
canSegment[0] = true;
for (int i = 1; i <= s.length(); i++) { // dp 的循环一定是 <=,
// 因为他的 size 比原来多一个
// 首先设成 false
canSegment[i] = false;
for (int lastWord = 1; lastWord <= maxLength && lastWord <= i; lastWord++) {
// 如果前半部分没法 break,那么就跳过,找下一个
if (!canSegment[i - lastWord]) {
continue;
}
String word = s.substring(i - lastWord, i);
if (wordDict.contains(word)) {
canSegment[i] = true;
break;
}
}
}
return canSegment[s.length()];
}
private int getMaxLength(Set<String> wordDict) {
int maxLength = 0;
for (String word : wordDict) {
maxLength = Math.max(word.length(), maxLength);
}
return maxLength;
}
}int lastWord = 1; lastWord <= maxLength && lastWord <= i; lastWord++if (!canSegment[i - lastWord]) {
continue;
}String word = s.substring(lastword + 1, i);String word = s.substring(i - lastword, i);