DP, f[i] 表示s[0..i]是否可以break。
class Solution {
public:
bool wordBreak(string s, unordered_set<string> &dict) {
const int n = s.size();
if(n == 0) return true;
vector<bool> f(n+1, false);
f[0] = true;
for(int i=1; i<=n; i++)
{
for(int j=i-1; j>=0; j--)
{
if(f[j] && dict.count(s.substr(j, i-j)) > 0)
{
f[i] = true;
break;
}
}
}
return f[n];
}
};