dp的方式, dp[i]表示该位置之前的词是否可拆分, 每个位置都需要从头遍历到当前位置, 并判断dp[j] && substr(i,j-i)
保证substr在字典. 时间复杂度(O(n^2)) 开始直接hashmap映射一下方便后面判断
unordered_map<string,bool> mp;
bool wordBreak(string s, vector<string>& wordDict) {
for (auto i : wordDict)
mp[i] = true;
int n = s.size();
vector<bool> dp(n+1);
dp[0] = 1;
for (int i = 1; i <= n; ++i)
for (int j = 0; j < i; ++j) {
dp[i] = dp[j] && mp[s.substr(j, i-j)];
if (dp[i]) break;
}
return dp[n];
}