拆分词句
描述
给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。
例如:
给定s=“nowcode”;
dict=["now", "code"].
返回true,因为"nowcode"可以被分割成"now code".
我们设定f(n)是以第n个字符串结尾的子字符串是否能够被拆分词句, 可以推导出
f( n ) = f(n - i) && dict.count( s.substr(i, n-i) ) > 0
f( n ) = f(n - i) && dict.count( s.substr(i, n-i) ) > 0
[就是从i到n这一段子字符串再字典里面]
有了这个公式, 我们从0开始,进行计算即可.
代码如下
class Solution {
public:
bool wordBreak(string s, unordered_set<string>& dict) {
vector<bool> res(s.size(), false);
res[0] = true;
for (int i = 1; i < s.size(); i++)
{
for (int j = 0; j < i; j++)
{
if (dict.count(s.substr(j, i-j)) > 0 && res[j])
{
res[j] = true;
}
}
}
return res[s.size() - 1];
}
};
时间和空间都还行