力扣专题——“139.单词拆分”

139-单词拆分

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

思路就是通过使用动态规划,用一个标记列表flag来标记是否匹配,这样前边匹配过的子序列就不用再次匹配了。
flag[i]的意思是,从前边到当前位置的子序列是否匹配,匹配的话为True,否则为false
因为初始化的时候除了第一个后边都设置为false 所以只有当子序列匹配的时候才会将相应位置的flag置为True
这样当需要切换子序列查询的时候如果判断当前选择的子序列的前边是否匹配,即flag是否为True即可,如果为真那么就继续判断当前子序列,如果为假,那么就跳过所选子序列,重新进行选择。
最后判断如果最后一个flag为True 那么说明最后一个之前的子序列也都匹配,也就是说可以实现所有的子序列与字典匹配

class Solution(object):
    def wordBreak(self, s, wordDict):
        """
        :type s: str
        :type wordDict: List[str]
        :rtype: bool
        """
        #初始化标记列表
        flag=[True]+[False]*len(s)
        
        for start in range(len(s)):
            if(flag[start]):
                for end in range(start+1,len(s)+1):
                    if s[start:end] in wordDict:
                        flag[end]=True
        return flag[-1]

作者:shang-91
链接:https://leetcode-cn.com/problems/word-break/solution/di-yi-ci-shi-yong-dong-tai-gui-hua-by-shang-91/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super尚

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值