思路:
动态规划,哈希表
代码:
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
//直接放入set中,不用循环
Set<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++){
//每次设置true是为了标记每个单词结束的地方,和新单词开始的地方
if(dp[j]&&set.contains(s.substring(j,i))){
dp[i]=true;
break;
}
}
}
return dp[s.length()];
}
}
分解:
1)每次设置true是为了标记每个单词结束的地方,和新单词开始的地方
每次s.substring(j,i)之后,下标i刚好就是新单词开始的地方
复杂度分析:
时间复杂度:O(N^2)
空间复杂度:O(N)