主要内容
完全背包的应用
动态规划题目
139. 单词拆分
思路分析
dp[i] 表示 s[:i]可否由列表中的单词拼成
dp[i] = 1 if dp[i-len(word[j])] = 1 and word[j] == s[i-len(word[j]):i]
dp[0] = 1
代码
class Solution:
# dp[i] 表示 s[:i]可否由列表中的单词拼成
# dp[i] = 1 if dp[i-len(word[j])] = 1 and word[j] == s[i-len(word[j]):i]
# dp[0] = 1
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
ns = len(s)
dp = [0] * (ns + 1)
dp[0] = 1
print([c for c in s])
for i in range(1, ns + 1): # 遍历背包
for word in wordDict: # 遍历物品
nw = len(word)
# print('i:',i,'nw:',nw)
if i >= nw:
# print("dp[i - nw]:",dp[i - nw],"word:",word,'s[]:',s[i - nw : i])
if dp[i - nw] == 1 and word == s[i - nw : i]:
dp[i] = 1
# print(dp)
return dp[ns] == 1