1147【leetcode】。最長チャンク回文分解

次のように内容は次のとおりです。

可能な限り最大の戻り  k が存在するよう  a_1, a_2, ..., a_k なことを:

  • それぞれの  a_i 非空の文字列です。
  • 彼らの連結は  a_1 + a_2 + ... + a_kに等しいです  text
  • すべてのために  1 <= i <= k、   a_i = a_{k+1 - i}

 

例1:

入力:テキスト= "ghiabcdefhelloadamhelloabcdefghi" 
出力:7 
説明:私たちは、 "(GHI)(ABCDEF)(ハロー)(ADAM)(ハロー)(ABCDEF)(GHI)"で文字列を分割することができます。

例2:

入力:テキスト=「商人」
出力:1つの
説明:私たちは、「(商人)」で文字列を分割することができます。

例3:

入力:テキスト= "antaprezatepzapreanta" 
出力:11 
説明:私たちは、(a)は」上の文字列を分割することができます(NT)(a)の(前)(ZA)(TPE)(ZA)(前)(a)の(NT)( A)」。

例4:

入力:テキスト= "AAA" 
出力:3 
説明:私たちは、上の文字列を分割することができます"(A)(A)(A)"。

 

制約:

  • text 小文字のみ、英語の文字で構成されます。
  • 1 <= text.length <= 1000

問題解決のアイデア:このタイトルは私のアプローチは、貪欲アルゴリズム+デュアルポインタである、あまりにも難しいことではありません。最初の[-1] [0]、テキストをテキストに等しいそれぞれ二つの変数の頭と尾を、導入します。ヘッドは、両方の部分は、2つのパリンドロームセグメントから構成されてもよい表す尾に等しい場合には、ヘッド等しいテキスト[1]、尾等しいテキストを[-2]行い、両者が等しくない場合、その結果、ヘッド=ヘッド+テキスト[0] 、尾=テキスト[-2] +尾部、 頭部は尾部に等しくなるまで。尾のヘッドは、2つのパリンドロームセグメント、ヘッドとリセット値の尾部の一部を表し、それぞれの場合に、遭遇する原理は同じです。

コードは以下の通りであります:

クラスのソリューション(オブジェクト):
     デフlongestDecomposition(自己、テキスト):
         "" " 
        :text型:STR 
        :RTYPE:int型
        """ 
        RES = 0 
        head_inx = 0 
        tail_inx = LEN(テキスト) - 1  = ''  = " 「
        しばらく head_inx <= tail_inx  head_inx <LEN(テキスト) tail_inx> = 0:
             もし頭== ''  テール== '' 
                ヘッド =テキスト[head_inx] 
                テール = テキスト[tail_inx] 
                head_inx + = 1 
                tail_inx - = 1つの
             ELIFのヘッド== 尾:
                RES + = 2  = テキスト[head_inx] 
                テール = テキスト[tail_inx] 
                head_inx + = 1 
                tail_inx - = 1
             #1 head_inx + = 1 
                tail_inx - = 1つの 
                ヘッド=ヘッド+ テキスト[head_inx] =テキスト[tail_inx] + テール
                head_inx + = 1 
                tail_inx - = 1つの
        RES + = 2 であれば   ヘッド==尾 head_inx - LEN(ヘッド)= tail_inx + LEN(尾)!他に 1つの
         リターン解像度の場合 RES = 0!他に 1

 

おすすめ

転載: www.cnblogs.com/seyjs/p/11303838.html