动态规划。
1.确定状态,dp[i]表示str[0...i]是否可以拆分
2.状态转移,j位于0~i-1之间,如果dp[j]为真,检查str[j...i]是否在字典中
3.边界,dp[0]为true
0 1 2 3 4 5 6 7 8
l e e t c o d e
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
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)
{
if(dp[j] )
{
for(int p = 0;p<wordDict.size();++p)
{
if(wordDict[p] == s.substr(j,i-j))//注意substr的参数j
{
dp[i] = true;
break;
}
}
}
}
}
return dp[s.size()];
}
};