139.单词拆分
Python:
把单词放进string背包里,由于string的顺序重要,所以是排列问题,需要先遍历背包,再遍历物品。
class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> bool:
wordSet = set(wordDict)
n = len(s)
dp = [False] * (n+1)
dp[0] = True
for i in range(1, n+1):
for j in range(i):
word = s[j:i]
if word in wordSet and dp[j]:
dp[i] = True
break
return dp[n]
C++:
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
vector<bool> dp(s.size()+1, false);
dp[0] = true;
for (int i=1; i<=s.size(); i++) {
for (int j=0; j<i; j++) {
string word = s.substr(j, i-j); //substr(起始位置,截取个数)
if (wordSet.find(word) != wordSet.end() && dp[j]) {
dp[i] = true;
}
}
}
return dp[s.size()];
}
};
关于 多重背包,力扣上没有相关的题目,所以今天大家的重点就是回顾一波 自己做的背包题目吧。