leetcode-140- Word Break II

题目阐述:

广度搜索问题。 计算出所有可能的情况。
衔接点在于segs的前后连贯,拼成所有的满足条件的segs
前后两个seg要连续。
递归问题,要记得设置终止退出条件
elems = {len(s): ['']} 设置成dict形式,就不需要过程中copy了,直接在此进行叠加累计

应用:将一个连续序列分成所有元素可能的组合情况。可以用list进行组装,也可以用dict形式进行组装。

重点:==> if i not in elems: 明确不必要的地方,可以不用去进行计算。

class Solution:

    def wordBreak(self, s, wordDict):
        elems = {len(s): ['']}
        wordDict = set(wordDict)
        len_dict = set(len(w) for w in wordDict)

        def sentences(i):
            if i not in elems:
                iters=list()
                for len_iter in len_dict:
                    cur_part=s[i:i+len_iter]
                    if cur_part and cur_part in wordDict:
                        # print('cur_part==>',cur_part)
                        # elems_iter=list()
                        elem_cur=cur_part
                        for item in sentences(i+len_iter):
                            # print('elem_cur==>',elem_cur)
                            iterow= elem_cur + (item and ' '+item)
                            # print('iter==>',iterow)
                            iters.append(iterow)
                    # print('iters==>',iters)
                elems[i]=iters
            return elems[i]
        result=sentences(0)
        # print(elems)
        return result
    原文作者:龙仔
    原文地址: https://segmentfault.com/a/1190000016006413
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞