题目
知识点
unordered_set a(vector.begin(),vector.end()) //哈希set,可以实现快速的查找
可以使用 a.count(“···”)快速查找
思考
刚开始被查找字符串难住了,后来看了博客才知道,可以使用哈希set来实现常数时间的查找。
对于每一个dp[i],需要遍历之前的dp[j] 0<=j<i,看由j分割的前后两个子串能不能在字典中找到
刚开始想着,判断每个dp[i]可能要找到之前某个dp[j]为true的情况,判断剩下s[j…i]的部分是不是在字典里,但忽略了此时可能整个组合起来可以在字典里找到。因此分割点j,要从0开始一点一点往前移动,整个遍历一遍。
代码
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> dict(wordDict.begin(),wordDict.end());
//哈希set,可以实现常数时间的查找,查找的时候使用.count函数
vector<int> a(s.size()+1);
a[0]=true;
//对s[1...i]判断能不能由字典中的词切分
for(int i=1;i<=s.size();i++){
for(int j=0;j<i;j++){
if(a[j] && dict.count(s.substr(j,i-j))){
a[i]=true;
break;
}
}
}
return a[s.size()];
}
};