赞
踩
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] = True
- map_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] = True
- return dp[n]
本题状态转移方程需要遍历字符串,根据字符i和j之间的子字符串是否出现在字典中,来判断dp[j]的状态,感觉上确实不像是背包问题,没必要硬套
背包问题总结:
01背包和完全背包:
01背包的二维dp数组实现先遍历物品或背包都行,第二层循环遍历是从小到大;而一维dp数组实现是先遍历物品,后遍历背包,且背包遍历是从大到小;
完全背包问题要根据题目判断是组合还是排列问题,求组合数是先物品后背包,求排列数是先背包后物品,两层循环遍历均是从小到大。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。