LeetCode ----最長の回文構造部分文字列

タイトル

タイトル説明

文字列を与えられた  s見つけるために、  s 最も長いサブストリングパリンドロームを。あなたは、と仮定することができる  s 1000年の最大の長さ。

入力:「babad」
出力:「BAB」
注:「ABA」は有効な答えがあります。

分析

  暴力:最初から直接最長の部分文字列を見つけるために、両側の次の反復を終了するには、中心を通って拡張することができます。

  馬車車のアルゴリズム(Manacher):使用Manacherアルゴリズム、最長の回文の部分文字列を見つけるために、動的プログラミング

ダイヤグラム

  建設。

コード

1つの     ストリングlongestPalindrome(文字列s){
 2          INT LEN = s.length()。
3          列ミリアンペア= 4          のためには、(I = 0をint型、iがLEN <; ++ I){
 5              ma.push_back(S [I])。
6              ma.push_back(' ' )。
7          }
 8          INT MX = 0、ID = 0、new_len = lenの* + 1 2、pは= 0、[new_len];融点
図9は、         のために <;(new_len ++ I I = 0 int型{I)
 10              、MP [I] = MX I>?分(MP [2 * ID-I]、MX-I):1 11             しながら(I-MP [I]> = 0 && MA [I-MP [I]] == MA [iが+ MP [I]]){
 12                  //チャーX = maは、Y [I [i]は、MPを+] = MA [I- MP [I]]。
13                  ++ MP [I]。
14              }
 15              であれば(私はMPを+ [I]> MX){
 16                  MX = iは+ [i]の融点と、
17                  ID = I。
18              }
 19              であれば(MP [I]> MP [P])P = I。
20          }
 21          LEN = MP [P] - 1 22          、P = P / 2 - LEN / 2 23          リターンs.substr(P、LEN)。
24      }

 

おすすめ

転載: www.cnblogs.com/qq188380780/p/11305419.html