139、单词拆分:
class Solution(object):def wordBreak(self, s, wordDict):""":type s: str:type wordDict: List[str]:rtype: bool"""n = len(s)dp = [False] * (n + 1)dp[0] = Truemap_word = set(wordDict)for j in range(1, n + 1):for i in range(j):if dp[i] == True and s[i:j] in map_word:dp[j] = Truereturn dp[n]
本题状态转移方程需要遍历字符串,根据字符i和j之间的子字符串是否出现在字典中,来判断dp[j]的状态,感觉上确实不像是背包问题,没必要硬套
背包问题总结:
01背包和完全背包:
01背包的二维dp数组实现先遍历物品或背包都行,第二层循环遍历是从小到大;而一维dp数组实现是先遍历物品,后遍历背包,且背包遍历是从大到小;
完全背包问题要根据题目判断是组合还是排列问题,求组合数是先物品后背包,求排列数是先背包后物品,两层循环遍历均是从小到大。