完全背包
背包是单词,字典是物品
排列问题:先遍历背包,再遍历物品
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
//1.定义长度为i的字符串, 可以被拼接true
int length = s.length();
HashSet<String> set = new HashSet<>(wordDict);
boolean[] dp = new boolean[length + 1];
//3.初始化
dp[0] = true;
//先遍历背包,可以保证排列的顺序
for(int i = 1; i <= length; i++){
//最多有i个
for(int j = 0; j < i && !dp[i]; j++){
//dp[j]true 并且 j-i是true dp[i] 一定是true
//dp[j]的长度为j,substring的j正好是s的第j+1个,substring是不包含i的,但一共是i个
if(set.contains(s.substring(j , i)) && dp[j]){
dp[i] = true;
}
}
}
return dp[length];
}
}