Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = "leetcode",
dict = ["leet", "code"].
Return true because "leetcode" can be segmented as "leet code".
因为dict是hash set,所以可以使用find(), substr()这几个函数来方便编程。这题是字典中的词正好完全拼接成字符串,s=aaaaa, {aaaa,aa}这种情况就不行。
思路:DP。f[i]表示s中0-i个字符匹配。f[i] = f[0~k] && f[k~i]. f[i]分为前k个和k-i个来讨论。
用代码描述就是f[i] = f[k] && (dict.find(s.substr(k, i-k)) != dict.end());
bool wordBreak(string s, unordered_set<string> &dict)
{
int n = s.size();
vector<bool> f(n+1, false);
f[0] = true;
for(int i = 1; i <= n; ++i)
{
for(int k = 0; k < i; ++k)
{
f[i] = f[k] && (dict.find(s.substr(k, i-k)) != dict.end());
if(f[i])
break;
}
}
return f[n];
}