问题描述:
思路分析:
一开始想的是简单粗暴的用DFS解决,然后提交代码发现超出时间限制了,只通过了29个用例=。=,后来改成用动态规划的思想。
代码:
/*动态规划*/
class Solution
{
public:
bool wordBreak(string s, vector<string>& wordDict)
{
vector<bool> flag(s.size() + 1, false);
flag[0] = true;
for (int i = 1; i < s.size() + 1; i++)
{
for (int j = 0; j < i; j++)
{
if (flag[j] && inDict(s.substr(j, i - j), wordDict))
{
flag[i] = true;
}
}
}
return flag.back();
}
bool inDict(string s, vector<string> wordDict)
{
for (auto x : wordDict)
{
if (x == s)
{
return true;
}
}
return false;
}
};
/*DFS 超出了时间限制*/
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
bool result = false;
DFS(s, wordDict, result);
return result;
}
void DFS(string s, vector<string>& wordDict, bool &result)
{
if (s == "")
{
result = true;
return;
}
string str;
for (int i = 0; i < wordDict.size(); i++)
{
if (result == true) break;
str = s.substr(0, wordDict[i].size());
if (str == wordDict[i])
{
str = s.substr(wordDict[i].size(), s.size() - wordDict[i].size());
DFS(str, wordDict, result);
}
}
}
};