题目阐述:
广度搜索问题。 计算出所有可能的情况。衔接点在于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