139. 单词拆分
1.确定dp数组,是在第i个位置是否可以被字典里的所有字符所拼接
2.确定递推公式,dp[i] = if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true
3.初始化:第一个为true
4.确定遍历顺序,这是排列问题,所以是先物品后背包
5.代码如下:
public boolean wordBreak(String s, List<String> wordDict) {
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&&!dp[i];j++){
if(set.contains(s.substring(j, i))&&dp[j]){
dp[i]=true;
}
}
}
return dp[s.length()];
}