那必然是dp了
思路:
这道题的dp还是蛮简单的,dp[i]表示s[i-1]的匹配状况,i遍历s,每由i得到的新字符s[i],由j向前构建字串s[j:i],如果字串存在,判断dp[j],这里注意不是dp[j+1],因为由j遍历到的那个字符属于新构建的字符串中
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int n=s.length();
vector<bool>dp(n,false);
dp[0]=true;
for(int i=0;i<n;++i){
for(int j=i;j>=0;--j){
string str=s.substr(j,i-j+1);
int index=count(wordDict.begin(),wordDict.end(),str);
if(index&&dp[j]){
dp[i+1]=true;
break;
}
}
}
return dp[n];
}
};