Medium
思路
- dp
- dp[n+1] 代表截止到数组的第n位的sub-string能不能被切割到wordDict中的单词
- 初始dp[0] = true, 最后返回dp[n]
- boolean类型的dp, size = n + 1(subString最后一位不包括在内)
- 定义一个lo指针和一个hi, 做二层for循环
- 外层是lo, 里层是hi, 每次进入里层之前都需要判断dp[lo] 是不是true, 只有在true的时候才可以继续做内层循环, 表明dp是连续的
- 里层循环循环worddict里面的单词, 简化代码, 每次hi = lo + 单词长度即可
代码
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
int n = s.length();
boolean[] dp = new boolean[n + 1];
dp[0] = true;
for(int lo = 0; lo < n; lo++){
if(dp[lo]){
for(String str : wordDict){
int hi = lo + str.length();
if(hi <= n && s.substring(lo, hi).equals(str))
dp[hi] = true;
}
}
}
return dp[n];
}
}