LeetCode--単語分割

トピック:

  単語リストを備える文字列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「比較的多数、存在しますそれは?

 

おすすめ

転載: www.cnblogs.com/latup/p/11730181.html