原题链接:https://leetcode-cn.com/problems/word-break/。
这个题可以利用动态规划的思想来做,首先建立一个动态规划表,dp[length+1],(长度接下来再解释),
dp[i] = True表示的是前i位(不包括i)是可以用单词字典来表示的。
因为要建立一个开头的辅助点,它的意义是空串也是单词字典的一个值,可以简化代码。
所以初始情况为dp[0] = True。
建立迭代式,
dp[i] = dp[j] && (s[j:i] 在单词字典里)
接下来就可以写代码了。
class Solution(object):
def wordBreak(self, s, wordDict):
"""
:type s: str
:type wordDict: List[str]
:rtype: bool
"""
length = len(s)
dp = [False for _ in range(length+1)]
dp[0] = True
wordDict = set(wordDict)
for i in range(1,length+1):
for j in range(i+1):
word = s[j:i]
if dp[j] and word in wordDict:
dp[i] = True
break
return dp[length]