Day 46| 139.单词拆分 |关于多重背包,你该了解这些!|背包问题总结篇!

● 139.单词拆分

/**
1.dp[i]:字符串长度为i的话,dp[i] == true ,表示可以拆分为一个或多个在字典中出现的单词.
2.如果确定dp[j]是true,且[j,i]这个区间的子串出现在字典里,那么dp[i]一定是true
3.initialize
dp[0]表示字符串为空,那么一定能出现在字典中
而本题其实我们求的是排列数,为什么呢。 拿 s = "applepenapple", wordDict = ["apple", "pen"] 举例。
​
"apple", "pen" 是物品,那么我们要求 物品的组合一定是 "apple" + "pen" + "apple" 才能组成 "applepenapple"。
​
"apple" + "apple" + "pen" 或者 "pen" + "apple" + "apple" 是不可以的,那么我们就是强调物品之间顺序。
​
所以说,本题一定是 先遍历 背包,再遍历物品。
 */
class Solution {
    public boolean wordBreak(String s, List wordDict) {
    HashSet set = new HashSet<>(wordDict);
    boolean[] valid = new boolean[s.length()+1];
    valid[0] = true;
​
    for(int i=1;i<=s.length();i++){
        for(int j =0;j 
  

你可能感兴趣的:(算法)