139.单词拆分
解题方法
1.dp数组及下标含义:
dp[i]:字符串长度为i,dp[i]为true;
2.确定递推公式:
if[i,j]出现在字典里&&dp[j]为true,那么dp[i]为true
3.dp数组如何初始化:
dp[0]=true;dp[i]=false;i非0
4.确定遍历顺序:
外层背包(字符串),内层物品(字典)
5.打印dp数组
Code
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string>wordSet(wordDict.begin(),wordDict.end());
vector<bool>dp(s.size()+1,false);
dp[0]=true;
for(int i=1;i<=s.size();i++)
{
for(int j=0;j<i;j++)
{
string word=s.substr(j,i-j);
if(wordSet.find(word)!=wordSet.end()&&dp[j])
{
dp[i]=true;
}
}
}
return dp[s.size()];
}
};
复杂度
时间复杂度
O(n^3)
空间复杂度
O(n)