建一个数组dp,dp[i]表示0~i是否可以被分成字典里的单词。遍历0到i的每个位置j,若0~j可以被分割成单词,那么只需要知道j~i是否在字典里就可以了。
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int n = wordDict.size();
int len = s.size();
vector<bool> dp(len + 1, false);
dp[0] = true;
for(int i = 1; i <= len; ++i)
{
for(int j = 0; j <= i; ++j)
{
if(dp[j] && find(wordDict.begin(), wordDict.end(), s.substr(j, i - j)) != wordDict.end())
{
dp[i] = true;
break;
}
}
}
return dp.back();
}
};