トピック:
単語リストを備える文字列s非空と非空の辞書のwordDictを考えると、空間Sが辞書にある単語の1回以上の繰り返しに分割することが可能か否かを判断します。
注意:
単語辞書を分割しながら、図1に示すように、再利用することができます。
2、それはしない辞書に繰り返される単語を想定することができます。
私の考えでは、sは辞書wordDictに単語を一致させることができます見つけるために、1でバックトラッキング、1を使用することです
1 輸入 java.utilの。* ; 2 3 公共の クラスのソリューション{ 4 プライベートリスト<文字列> wordDict。 5 6 パブリック ブール wordBreak(文字列S、リストの<string> wordDict){ 7 この .wordDict = wordDict。 8 リターン検索(S、0 ); 9 } 10 11 パブリック ブール検索(文字列s、int型私は) 12 { 13 であれば(I == s.length()) 14 { 15 リターン trueに; 16 } 17 18である ため(int型、J <s.length(); J = J ++) // ステップ2、後続のマッチングステップ1が失敗した場合、フォールバックと見つけるために、ポインタjを移動します辞書には、追加のサブストリングが含ま 。19 { 20である 場合(wordDict.contains((I、J + 1 s.substring ))) 21である { 22である のiF((S、J + 1)検索) // 見つけるために、ステップ1単語辞書、マッチングは、後続の継続した場合 23である { 24 リターン trueに; 25 } 26である } 27 } 28 リターン 偽; 29 } 30 }
上記のアルゴリズムの時間複雑度は、O(N)の最良の時間複雑さ、即ち、唯一1つの文字列を横断するが、最悪の場合の時間Oの複雑さ(N ^ 2)で、即ち、各単語を転送し、我々は、文字列を再反復処理する必要があります。29試験による36のleetcode試験において、示唆しているようないくつかのタイムアウトにテスト:S = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"、wordDictは= [ "A"、 "AA"、 "AAA"、「AAAAこのテストケースでは、上記のアルゴリズムは、比較の繰り返しを避けるためにどのような方法がある「」AAAAA「」AAAAAA「」AAAAAAA「」AAAAAAAA「」aaaaaaaaa「」重複コストのAAAAAAAAAA「比較的多数、存在しますそれは?