LeetCode 140. Word Break II

LeetCode 140

可以使用dfs的方法来查找,不断的match prefix的部分,如果成功,那么递归继续,直到能match到字符串结束,如果不成功,那么就增加prefix的部分继续match。

增加一个优化就是,先考虑是否有足够长的字符串可以用于match,如果不够,可以快速结束。

    def wordBreak(self, s: str, wordDict: List[str]) -> List[str]:        
        wordLets = set(''.join(wordDict))        
        stringLets = set(s)

        if stringLets - wordLets:
            return []        
        
        wordDict = set(wordDict)
        result = []

        def matchWord(s, wordDict, currentMatched, cstart, cend, result):
            if cstart == len(s):
                result.append(" ".join(currentMatched))
                return
            
            for iend in range(cend, len(s)+1):
                subs = s[cstart:iend]
                if subs in wordDict:
                    currentMatched.append(subs)
                    matchWord(s, wordDict, currentMatched, iend, iend+1, result)
                    currentMatched.pop(-1)
        matchWord(s, wordDict, [], 0, 1, result)
        return result  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值