前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 139. 单词拆分(DP)

LeetCode 139. 单词拆分(DP)

作者头像
Michael阿明
发布2020-07-13 15:55:27
3730
发布2020-07-13 15:55:27
举报
文章被收录于专栏:Michael阿明学习之路

1. 题目

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。

代码语言:javascript
复制
示例 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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/word-break 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 动态规划

  • 将单词拆分成两部分单词长度为n,一部分第1个字符到第 i 个 [1,i], 另一部分 [i+1,j]
  • dp[i] 表示包含第 j 个字符为结尾的字符能否拆分
  • dp[0] = true 表示空字符,存在集合中
  • 如果第一部分,不存在,直接 i++,没必要考虑第二部分了
  • 如果第一部分,存在,且第二部分存在,dp[j] = true, j++
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
class Solution {	//C++
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        int i, j, n = s.size();
        unordered_set<string> set(wordDict.begin(), wordDict.end());
        vector<bool> dp(n+1,false);//dp[j]包含第j个字符为结尾的字符能否拆分
        dp[0] = true;//空字符能拆分
        for(i = 0; i <= n; ++i)
        {
        	if(dp[i] == true)//左半边存在
	        	for(j = i+1; j <= n; ++j)
	        	{
	        		if(set.count(s.substr(i,j-i)))//右边也存在
	        			dp[j] = true;
	        	}
        }
        return dp[n];
    }
};
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
class Solution:# py3
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        n = len(s)
        dp = [False]*(n+1)
        d = set(wordDict)
        dp[0] = True
        for i in range(1,n+1):
            for j in range(i, n+1):
                if s[i-1:j] in d and dp[i-1]:
                    dp[j] = True
        return dp[n]

56 ms 13.7 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 动态规划
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档