精品网站建设费用 c磐石网络,gowers wordpress com,wordpress 无法写新文章,产品seo基础优化力扣-139单词拆分
1、题目
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
注意#xff1a;不要求字典中出现的单词全部都使用#xff0c;并且字典中的单词可以重复使用。
示例 1#xff1a;
输入: s …力扣-139单词拆分
1、题目
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
注意不要求字典中出现的单词全部都使用并且字典中的单词可以重复使用。
示例 1
输入: s leetcode, wordDict [leet, code]
输出: true
解释: 返回 true 因为 leetcode 可以由 leet 和 code 拼接成。2、分析
首先看都这个问题第一个想到的还是回溯但是现在动归训练了这几天也可以看出这是个完全背包问题因为可以重复使用。dp[i]就表示长度为i时在0-i区间这个截取字符串是否满足wordDict字符串构成若构成则值为true反之为false其次因为组成的是个字符串单词是有顺序的所以采用排列方式即外循环i为背包容量即s字符串长度外循环j当ji即构成j-i这个区间的字符串可完成判断是否在wordDict中存在若存在即dp[i]true若不存在还是false不变。这样我们在判断是否存在时就可以通过前面的dp[j]是否是true如果是true代表前面刚好放入了一个wordDict字符串结尾在j下标后面我们才能再放入一个完整的新wordDict里面的字符串。这里我们可以利用hashset存wordDict值或者在循环的时候进行截取即可。编写代码。
3、代码及注释
class Solution {public boolean wordBreak(String s, ListString wordDict) {// 1.完全背包判断情况排列// 2.dp[i]表示到i下标前能够添加成功wordDict字符串为trueboolean[] dp new boolean[s.length() 1];SetString set new HashSet(wordDict);dp[0] true;for (int i 1; i s.length(); i){for (int j 0; j i; j){// 3.wordDict是否存在是否在前面j的时候是放入完整的一个字符串if (set.contains(s.substring(j, i)) dp[j]){dp[i] true;}}}return dp[s.length()];}
}4、练习
力扣题目链接https://leetcode.cn/problems/word-break/