【Leetcode139】ワードブレイク

調和は、あらゆる場所可能ための分割点として、動的計画問題である分割点として使用される「できる」、セグメンテーションは、例えば、必ずしもここでありません。

Iは、S = 7の "AAAAAAA" を有する ''、辞書{ "AAA"、 "AAAA"}。最初の6は2つのグループ「AAA」に分かれている場合、部門の残りの部分は、そのインデックスが完全に分割されていることを、例えば、その後、ここで議論することができません。

あなたが知りたい場合はindex1のは、INDEX2は、index3指数は、3の位置を表して1〜打破することができますindex3、我々は知っている0〜打破することができますINDEX2、残りは言葉は、判定INDEX2 + 1〜index3でない場合ではありません私はそれはあなたが本当にここに分かれている場合、その後、バックは0〜INDEX2は、分割を完了することができますので、けれども、我々はこの提案を受け入れない、確立されていないと言うかを説明することはできません。言葉ではありませんindex1の〜index3を分析するために、その後、index1のも完全に分離することができます〜0の間、続けます。ここなおindexx間〜index3ワードではなく分割することができるの存在または不在

動的プログラミングは、現在のサブ問題に基づいて問題を解決するために、逆プッシュすることを特徴とします。 

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        std::vector<bool> flag(s.length()+1, false);
        flag[0] = true;
        for(int i = 0; i < s.length(); ++i){//包括i可分,保存在i+1位置,例如0位置可分的flag在1
            for(int j = i-1; j >= -1; --j){
                if(flag[j+1] && wordSet.count(s.substr(j+1, i-j))){
                    flag[i+1] = true;
                    break;
                }
            }
        }
        return flag.back();
    }
};

コードにC ++ことに注意してください。

1、ここでunorderd_set、順序付けられていないハッシュテーブルの利点は、高速検索、保存するデータのニーズの一種類のみに比べてマップを設定します。

2、私も本当にそれは確かに設定することができ、ベクトルはunordered_set初期化することができるとは思いませんでした。

3、OFF位置にフラグのフラグ設定、分離可能かどうか、このフラグ[i]が実際に保存され、含むS [I-1]であれば分離、フラグ[0]が保存されているSでオフにされます[-1]、この位置の重要性は、それが、である、仮想初期のうち、S [-1]、Sを初期化する必要があるため、存在しない現在、このようなA事に喜んである[0]に対応するフラグブール値であります

 

公開された112元の記事 ウォン称賛15 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_39458342/article/details/104957538