拆分类dp问题
dp[i]:前 i 个字符组成的字符串是否符合题意(是否可由字典中的串表示)
(eg:dp[2]表示第一个”s[0]s[1]“是否符合题意)
算法思想:初始化dp[0]=true;
遍历每一个字符,判断他前面的字符串(不包括它)是否符合题意,符合则dp[i]=true
如何判断是否符合题意:将这个字符串以不同方式拆成两串,s[0]~s[j-1],s[j]~s[i-1], (j是“分割线”)第 一个串可以由dp[j]直接判断是否符合题意,第二个串 通过寻找字典中 是否有与该串完全相等的串 来判断是否符合题意。
返回dp[ l ](l 是s的长度)
bool wordBreak(string s, vector<string>& wordDict) {
int l=s.size();
int n=wordDict.size();
vector<bool> dp(l+10,false);
dp[0]=true;
for(int i=1;i<=l;i++){
for(int j=0;j<=i;j++){
if(dp[j]){
for(int k=0;k<n;k++){
if(wordDict[k]==s.substr(j,i-j)){
dp[i]=true;
break;
}
}
}
if(dp[i]){
break;
}
}
}
return dp[l];
}