139. Word Break

ss
Feb 24, 2021

--

我覺得我方法沒有想錯, 但我忽略一件事, 就是我用滑動窗口來紀錄dp,

這樣會有個問題, 舉個例

aaaaaaa, ["aaaa", "aaa"]

當我假設用滑動窗口在紀錄時 aaa就會先吃掉前面三個

但這邊理論上是要用aaaa, 再搭配三個a, 所以用滑動窗口會有這個bug

所以實務上, 我們在i遍歷時, 我們還是得看他先前的所有遍歷, 倘若找到了, 就直接跳掉

class Solution {
public:
bool wordBreak(string s, vector<string> &wordDict) {
unordered_set<string> st(wordDict.begin(), wordDict.end());
vector<bool> dp(s.size() + 1);
dp[0] = true;
for (int i = 0; i < dp.size(); i++) {
for (int j = 0; j < i; j++) {
if (dp[j] && st.count(s.substr(j, i - j))) {
dp[i] = true;
break;
}
}
}
return dp[s.size()];
}
};

--

--

ss
ss

No responses yet