ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

力扣-12.18-139

2020-12-18 21:32:59  阅读:211  来源: 互联网

标签:int len 力扣 boolean wordDict 139 true dp 12.18


在这里插入图片描述
在这里插入图片描述
类似第322题的第一种方法:
外层循环是背包,内层循环是物品,需要注意的是和前几题不一样

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

另一种写法:

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

在求 dp[i] 的时候需要和 dp[i] 进行与操作而不直接写成

dp[i] = dp[i - l];

的原因是可能前面的单词已经可以满足要求,将 dp[i] 设置为true了,但是之后的单词不满足要求,又将其设置为false了,或者可以像下面这样写:

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

标签:int,len,力扣,boolean,wordDict,139,true,dp,12.18
来源: https://blog.csdn.net/Desperate_gh/article/details/111396398

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有