代码随想录算法训练营 day46 | 139.单词拆分

目录

  • 139.单词拆分
    • 思路
    • 代码

代码随想录

139.单词拆分

思路

可以用回溯法:分割单词,看分割的结果是否在字典里出现过
背包问题
定义dp[j]是长度为j的单词,是否能由当前字典词汇组成,如果是true,表示可以
dp[0]=true

递推公式:
如果dp[j]是true,且j-i区间的字符串出现在字典中,那么就返回true

完全背包问题、且是排列问题,因为字符串的排列顺序是有关系的

先遍历背包,再遍历物品,且遍历背包的时候从小到大

代码

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        boolean dp[] = new boolean[s.length()+1];
        dp[0]=true;
        for(int j = 1;j<=s.length();j++){
            for(int i = 0;i<wordDict.size();i++){
                String w = wordDict.get(i);
                int len = w.length();
                if(j>=len&&dp[j-len]&&w.equals(s.substring(j-len,j))){
                    dp[j]=true;
                    break;
                }
                    
            }
        }
        return dp[s.length()];

    }
}


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