思路:
动态规划. 外层循环遍历s每一个字符, 内层循环再从头往第i个字符遍历一次, 看看有没有哪切一刀以后前半部分的dp结果是真, 后半部分的子串还在字典里, 如果有就把当前dp置为真, 以此类推.
bool wordBreak(string s, unordered_set<string>& wordDict) {
bool dp[s.length() + 1] = {0};
dp[0] = true;
for (int i = 0; i <= s.length(); i++) {
for (int j = 0; j < i; j++) {
if (dp[j] && wordDict.count(s.substr(j, i - j))) {
dp[i] = true;
break;
}
}
}
return dp[s.length()];
}