代码随想录 day46
题139 单词拆分
1,将字典看作物品,字符串看做背包。
2,dp[i]表示字符串s中前i个子串是否能够由字典中的单词组成。则dp[j]能否为真取决于dp[i]和从第i到j之间的子串是否存在于字典中。
3,其实本题为感觉更像是快慢指针来遍历字符串,而并没有遍历字典中的单词(判断是否包含某单词时遍历了,但并不是某种意义上背包问题的遍历物品)。
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
//dp[j]表示s中前j的子串可否由字典中的单词组成
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true;
//将字典中的单词当作物品,s作为背包,先遍历背包
for(int j = 0; j <= s.length(); j++) {
for(int i = 0; i < j; i++){
if(wordDict.contains(s.substring(i, j)) && dp[i]) {
dp[j] = true;
}
}
}
return dp[s.length()];
}
}