给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
思路:
- dp[i]表示从 0 到 i 能否拆分。
- 状态转移方程为:dp[i] = s[j–>i] in wordDict and dp[j]。
- 需要定义dp[0]为 true,因为如果字符串本身就在 wordDict 中,就不必看dp了,可以直接判断为 true,因此 dp[0] = true;
public class LC139 {
public boolean wordBreak(String s, List<String> wordDict) {
if (wordDict == null || wordDict.size() == 0) {
return false;
}
HashSet<String> set = new HashSet<>(wordDict);
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true;
for (int i = 1; i <= s.length(); i++) {
for (int j = 0; j < i; j++) {
if (dp[j] && set.contains(s.substring(j, i))) {
dp[i] = true;
break;
}
}
}
return dp[s.length()];
}
}