leetcode 139. Word Break
题意:给你一个字符串,再给你一堆单词,问你字符串能不能用单词组成。
字符串长度,单词个数都没有给出来,没给就没给,直接暴力来一发。
把[0,i]分成[0,j],[j+1,i]两部分,如果[0,j]能找到,[j+1,i]能找到,那肯定能找到啦!然后直接在单词字典找就好啦!
对于第一部分,直接用dp[]记录状态,1表示找到,0表示没有找到。
对于第二部分,用j表示分界点,word的范围就是[j+1,i],也就是substr(j+1,i-j),用find()直接在字典里面找第二部分的单词。
over!
这里有个细节要注意,就是字符串是从0开始,那么dp[0]=1,不是空字符串能找到,而是第一个字符能找到。
所以往原字符串前面加个' '就好了,dp[0]=1就完美了。
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict)
{
if (wordDict.size() == 0) return false;
string ss = " " + s;
int len = ss.size();
vector<bool> dp(len+1,false);
dp[0] = true;
for (int i = 1; i < len; i++)
{
for (int j = i-1; j >= 0; j--)
{
if (dp[j])
{
string subword = ss.substr( j+1 , i - j );
if (find(wordDict.begin(), wordDict.end(), subword) != wordDict.end())
{
dp[i] = true;
break;
}
}
}
}
return dp[len-1];
}
};