LeetCode 139. 单词拆分

原题链接:. - 力扣(LeetCode)

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例 1:

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。

示例 2:

输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。
     注意,你可以重复使用字典中的单词。

示例 3:

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

提示:

  • 1 <= s.length <= 300
  • 1 <= wordDict.length <= 1000
  • 1 <= wordDict[i].length <= 20
  • s 和 wordDict[i] 仅由小写英文字母组成
  • wordDict 中的所有字符串 互不相同

思路:

本题可以视作一个完全背包问题,单词的长度 s 为背包的容量,字典里面的各个字符串为 物品。采用动态规划来解决。dp[ i ] 为 true 则表示长度为 i 的字符串能由字典里面的字符串组成。

递推公式:dp[ i ] 为 true,当且仅当 [ j,i ) 的子字符串能由 字典里面的字符串组成且 dp[ j ] 为 true。初始化:将 dp[ 0 ] 初始化为 true,这是后面的 dp 值中能有 true 的基础。遍历顺序:本题需要先遍历背包容量,再遍历物品。因为可能需要同一个字典中的字符串在背包中再次出现。如 “applepenapple”,若先遍历物品,1:apple ,2:pen, 则 apple 不会在 pen 之后再出现了。

代码:

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        HashSet<String> set = new HashSet<>(wordDict);
        //dp[i]为 true 表示长度为i的字符串能由字典内的单词拼出
        boolean[] dp = new boolean[s.length()+1];
        dp[0]=true;
        //i是背包容量
        for(int i=1;i<=s.length();i++){
            for(int j=0;j<i&&dp[i]!=true;j++){
                if(set.contains(s.substring(j,i))&&dp[j]){
                    dp[i] = true;
                }
            }
        }
        return dp[s.length()];
    }
}

参考:代码随想录

相关推荐

  1. Leetcode 139 单词

    2024-04-14 03:58:07       28 阅读
  2. leetcode 139. 单词

    2024-04-14 03:58:07       18 阅读
  3. LeetCode 139. 单词

    2024-04-14 03:58:07       14 阅读
  4. 动态规划 Leetcode 139 单词

    2024-04-14 03:58:07       16 阅读
  5. LeetCode-139单词(回溯&动归)

    2024-04-14 03:58:07       30 阅读
  6. 【动态规划】Leetcode 139. 单词【中等】

    2024-04-14 03:58:07       11 阅读
  7. 【算法刷题day46】Leetcode139. 单词

    2024-04-14 03:58:07       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 03:58:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 03:58:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 03:58:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 03:58:07       18 阅读

热门阅读

  1. 人工智能技术的创业机遇

    2024-04-14 03:58:07       14 阅读
  2. [ LeetCode ] 题刷刷(Python)-第49题:字母异位词分组

    2024-04-14 03:58:07       13 阅读
  3. 如何在Python中实现设计模式?

    2024-04-14 03:58:07       16 阅读
  4. C动\静态库编译

    2024-04-14 03:58:07       14 阅读
  5. python3面向对象

    2024-04-14 03:58:07       14 阅读
  6. pyqt写个星三角降压启动方式2

    2024-04-14 03:58:07       13 阅读
  7. postgis使用

    2024-04-14 03:58:07       16 阅读
  8. photoshop基础学习笔记

    2024-04-14 03:58:07       13 阅读
  9. 第六周学习笔记DAY.1

    2024-04-14 03:58:07       15 阅读