problem:
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"
.
thinking:
从s的第一个字母向后匹配,如果i前面的前缀可以匹配,就看s字符串i以后的后缀是否匹配
code:
class Solution{
public:
bool wordBreakHelper(string s, unordered_set<string> &dict,set<string> &unmatch) {
if(s.length() < 1) return true;
bool flag = false;
for(int i = 1; i <= s.length(); i++)
{
string prefixstr = s.substr(0,i);
unordered_set<string>::iterator it = dict.find(prefixstr);
if(it != dict.end())
{
string suffixstr = s.substr(i);
set<string>::iterator its = unmatch.find(suffixstr);
if(its != unmatch.end())continue;
else{
flag = wordBreakHelper(suffixstr,dict,unmatch);
if(flag) return true;
else unmatch.insert(suffixstr);
}
}
}
return false;
}
bool wordBreak(string s, unordered_set<string> &dict) {
int len = s.length();
if(len < 1) return true;
set<string> unmatch;
return wordBreakHelper(s,dict,unmatch);
}
};