题目:
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
来源:力扣(LeetCode)
题解:
类似于完全平方数分割问题,这道题的分割条件由集合内的字符串决定,因此在考虑每个分割位置时,需要遍历字符串集合,以确定当前位置是否可以成功分割。注意对于位置 0 ,需要初 始化值为真。
代码展示
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int n = s.length();
vector<bool>dp(n+1,false);
dp[0] = true;
for(int i = 1; i<=n;i++)
{
for(const string &word :wordDict)//注意字典遍历的方式
{
int len = word.length();
if(i>=len&&s.substr(i-len,len)==word)
dp[i] = dp[i-len]||dp[i];
}
}
return dp[n];
}
};