题目链接:https://leetcode-cn.com/problems/word-break/
题意:
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
说明:
拆分时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。
方法:动态规划,双重循环更新规划数组
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int size = s.size();//记录字符串长度
unordered_set<string> mp;//哈希表,存储字典中的字符串
for(auto& str:wordDict)
{
mp.insert(str);//更新哈希表
}
vector<bool> dp(size+1,false);//规划数组,dp[i]表示从0到i是否可以拆分成字典中的单词
dp[0] = true;//空串是可行的
for(int i=0;i<=size-1;i++)
{
for(int j=i+1;j<=size+1;j++)
{
string sub = s.substr(i,j-i);//切取子段
// if(j==4&&sub=="leet") return true;
if(dp[i]==true&&mp.find(sub)!=mp.end())//从0到i可以被切分为字典中的单词,并且从i+1到j也是字典中的单词
dp[j] = true;//对应的状态位置为true
}
}
return dp[size];//返回最后一个dp值
}
};