题目描述:
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
解题思路:
这题用动态规划做,先写出状态转移方程
f[j] 表示s[0,j)是否可拆分
所以f[i] = true <==> 找到任何一个j( 0<=j<i),满足 f[j]==true &&s[j,i)可以在字典中找到
初始条件f[0]=true 当字符串s为空时,肯定可以由字典拼出
bool wordBreak(string s, vector<string>& wordDict) {
int n = s.size();
vector<bool> f(n+1,false);
f[0] = true;
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
if(f[j] && find(wordDict.begin(), wordDict.end(),s.substr(j,i-j))!=wordDict.end()){
f[i] = true;
break;
}
}
}
return f[n];
}