分析
一个单词从中间切多刀,其实就可以看成只切了两刀,不过前面一段可以继续切,后面一段不可以继续切,就和我之前总结切绳子是一个道理,如果前面一段可以找到(这里其实可以继续分,只要分割后的几段也能在集合中找到也算是找的到),后面这一段也可以找到,拼接在一起后,就一定可以满足要求,可以用一个数组dp[j]表示0到j-1这个字符串存不存在(即使是分割后),只要这个字符串存在dp[j],s.substring(j, i)也存在,就表示这个字符串可以
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
HashSet<String> set = new HashSet<>(wordDict);
int len = s.length();
boolean[] dp = new boolean[len + 1];
dp[0] = true;
for(int i = 1; i <= len; i++) {
for(int j = 0; j < i; j++) {
if(dp[j]&&set.contains(s.substring(j, i))) {
dp[i] = true;
break;
}
}
}
return dp[len];
}
}