当前位置:   article > 正文

代码随想录算法训练营day46| 139. 单词拆分、背包问题总结

代码随想录算法训练营day46| 139. 单词拆分、背包问题总结

139、单词拆分:

  1. class Solution(object):
  2. def wordBreak(self, s, wordDict):
  3. """
  4. :type s: str
  5. :type wordDict: List[str]
  6. :rtype: bool
  7. """
  8. n = len(s)
  9. dp = [False] * (n + 1)
  10. dp[0] = True
  11. map_word = set(wordDict)
  12. for j in range(1, n + 1):
  13. for i in range(j):
  14. if dp[i] == True and s[i:j] in map_word:
  15. dp[j] = True
  16. return dp[n]

本题状态转移方程需要遍历字符串,根据字符i和j之间的子字符串是否出现在字典中,来判断dp[j]的状态,感觉上确实不像是背包问题,没必要硬套

背包问题总结:

01背包和完全背包:

01背包的二维dp数组实现先遍历物品或背包都行,第二层循环遍历是从小到大;而一维dp数组实现是先遍历物品,后遍历背包,且背包遍历是从大到小;

完全背包问题要根据题目判断是组合还是排列问题,求组合数是先物品后背包,求排列数是先背包后物品,两层循环遍历均是从小到大。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号