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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。