1.题目
给定一个字符串s
,以及一个字典wordDict
,判断这个字符串是否可以从字典的中的单词构造而成。字典中的单词可以无限次重复使用。
2.思想
dp思想
如果之前写过爬楼梯,那么可以抱着爬楼梯的思想看看这道题,就可以发现其实这些题都是换汤不换药的。爬楼梯一次可以爬1步,2步。最后看有多少种方法爬完楼梯。这里的拼字符串每次可以爬的步数则是字典中的单词长度,但是有个限制就是拼接的字符串需要和字符串匹配上。(相较于爬楼梯多了一个限制)
具体来说:
- step 1:设置
dp[i]
表示字符串s[:i]
是否可以根据wordDict
拼凑出来。 - step 2:那么当
dp[i]
为True时,可以将字典中的所有词都处理一下,如果后续的字符串和字典中的字能匹配,那么就更新一下dp[i+len(word)]
的值(从False->True
) - step 3: 最后输出
dp[-1]
3.代码