class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
//背包 s,物品 字符串列表
//dp[j] j 个字母的字符串是否可以由字典组成,可以则true
//dp[j] = (dp[j - i] = true && j~i 在字典里面)
//dp[0] = true
//有先后顺序,所以时是排列, 先遍历背包
//可以重复使用,完全背包,从前往后遍历
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true;
for(int j = 1;j <= s.length();j++){
for(String str : wordDict){
int len = str.length();
if(j >= len && dp[j - len] && str.equals(s.substring(j - len,j)))
dp[j] = true;
}
}
return dp[s.length()];
}
}