基本思想:
没想到是个DP问题,本来想着用搜索;
用DFS+记忆化搜索可行;
主要是状态转移方程: 1.每次便利0-i的字符串,并且用j分割,看dp[j]是否是true,并且j-i是否在worddict中,然后更新dp[i]; 2.由于i从1开始,能够保证所有的dp[j]必定已经处理过;
具体代码:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> ud;
for (auto ele : wordDict) {
ud.insert(ele);
}
vector<bool>dp(s.size() + 1);
dp[0] = true;
for (int i = 1; i < dp.size(); i++) {
for (int j = 0; j < i; j++) {
if (dp[j] && ud.find(s.substr(j, i - j))!=ud.end()) {
dp[i] = true;
break;
}
}
}
return dp[s.size()];
}