[アルゴリズム]動的計画法-文字列セグメンテーション

説明

文字列sと単語のdictが与えられた場合、単語のシーケンス内のすべての単語がdict内の単語になるようにsをスペース付きの単語のシーケンスに分割できるかどうかを判断します(シーケンスには1つ以上の単語を含めることができます)。

例:
given s = "nowcode";
dict = ["now"、 "code"]。
「nowcode」は「nowcode」に分割できるため、trueを返します。

 単語とicon-default.png?t = M0H8文を分割する/質問ランキング

 アイデア:

 

 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()];
    }
};

 

 

おすすめ

転載: blog.csdn.net/m0_51866180/article/details/122878629
おすすめ