
class Solution {
/**
* 举个例子:
* dp["onetwothreefour"] = dp["onetwothree"这一段] && 判断一下"four"
*/
public boolean wordBreak(String s, List<String> wordDict) {
Set<String> wordSet = new HashSet<>(wordDict);
int n = s.length();
// dp[i] 表示 s 中以 i-1 结尾的字符串是否可被 wordDict 拆分
boolean[] dp = new boolean[n + 1];
dp[0] = true; // 空串是可以被拆分成功的:
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i; j++) {
// 如果 j 之前的可以拆分 就判断 j..i-1是否在字典中,
if (dp[j] && wordSet.contains(s.substring(j, i))) {
dp[i] = true;
break;
}
}
}
return dp[n];
}
}