给出一个字符串和一个字典,要求出这个字符串能否被划分为这个字典中的一个或者多个单词。单词可重复使用。
解题:用动态规划。dp[i+1]表示在s[:i+1]这个切片是否由字典中的单词组成。而dp[i+1]=1的前提是dp[i+1-j]=1且s[i-j+1:i+1]这个切片在字典当中,其中j为字典中存在的某一单词的长度(需要列举所有字典存在单词以查看是否存在这个单词)。
代码:
class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
dp=[0]*(len(s)+1)
dp[0]=1
l=[len(i) for i in wordDict]
for i in range(len(s)):
for j in l:
if i-j+1>=0 and dp[i-j+1] and s[i-j+1:i+1] in wordDict:
dp[i+1]=1
break
return dp[-1]==1