説明
文字列sと単語のdictが与えられた場合、単語のシーケンス内のすべての単語がdict内の単語になるようにsをスペース付きの単語のシーケンスに分割できるかどうかを判断します(シーケンスには1つ以上の単語を含めることができます)。
例:
given s = "nowcode";
dict = ["now"、 "code"]。
「nowcode」は「nowcode」に分割できるため、trueを返します。
アイデア:
F [8]を探すときは、F [1]〜F [7]で何を割るかを気にする必要はなく、結果を取得するだけです。
コード:
class Solution {
public:
bool wordBreak(string s, unordered_set<string>& dict) {
if (s.empty())
return false;
if (dict.empty())
return false;
vector<bool> F(s.size() + 1, false);
// 初始化F(0) = true
F[0] = true;
for (int i = 1; i <= s.size(); ++i)
{
for (int j = i - 1; j >= 0; --j)
{
// F(i): true{j <i && F(j) && substr[j+1,i]能在词典中找到} OR false
// 第j+1个字符的索引为j
if (F[j] && dict.find(s.substr(j, i - j)) != dict.end())
{
F[i] = true;
break;
}
}
}
return F[s.size()];
}
};