(Manacherアルゴリズム) - 最長のサブストリングドロームバックル5-力

タイトル:出力パリンドローム最長の部分文字列は、元の1000年の最も長い文字列

ピット:日本語文S = "";

見直し馬車車のアルゴリズムを単に答えを書き込む前に、出力文字列ではありません、。

クラスソリューション{
     パブリック文字列longestPalindrome(文字列S){
         // レイド決意= S "" 
        IF(s.length()== 0 戻りS; 


           チャーは [] = 新しい新しい チャー [20005 ;]
            INT [] = P 新しい新規の int型 [20005]; // 各半径の位置を記録 
        '!' [0] =; // 包括プラスインコヒーレント文字
        int型。CNT = 1; // Aの添え字のカウント
        のためにint型 I = 0; I <s.length(); I ++ ){ 
            A [CNT] = '#' ; 
            CNT ++ 
            [CNT] = s.charAt(I); 
            CNT ++ ;     
        } 
        A [CNT] = '#' ; 
        CNT ++ ; 
        A [CNT] = '@'; // 包括プラス無関係な文字
        
        / * 前端部処理、アルゴリズムが開始
        添字文字現在の反復を表し:iは
      自己含む、パリンドロームIDX下付文字の半径を表す:P [IDX]の
      IDを本工程を横断する右端回文に拡張することができ中心点
      のmx:現在の横断プロセスがのは最も遠いプローブの長さの呼びましょう、右端の位置インデックスに拡張することができます
      jは:idが私についての文字対称に中心に、idが左側にあるが、トラバースされており、 P [j]は、で決定された
        長さのパリンドローム最長サブ:ANS 
        T:元の文字列開始インデックスでパリンドローム最長サブ
        * / 
        INT ANS = 2 ;
         INT T = 0 ;
         INT= 1 ID、MX = 1 ;
         INT。LEN s.length = 2 *()+ 3; // 補間#プラスエンドツーエンドの長さ
        のためにINT I = 1; Iは<LEN; I ++ ){
             int型 J = 2 ID * - I;
             IF(MX> I){
                 IF(MX-I> = P [J])
                    P [I] = P [J]; // I ID及びjは対称であるが、IDの中心の列を含みますIまたはJの中心にパリンドロームサブストリング最も長い
                 
                    P [I] = MX- I; 
            } そう 
                P [I] = 1 ; 
            
            // 仮P [i]は、より大きな又は中心が存在してもよいです拡張
            しながら(A [I + P [I]] == A [I- P [I])を
                P [I] ++ ; 
            
            IF(I + P [I]> MX){ // 更新し、IDに対応する右端のポイント 
                ID = I; 
                MX = ID + P [I]; 
            } 
            
            IF(P [I]> ANS ){//回答更新
                ANS = Pを[I]; 
                T =(P-ID [ID])/ 2; // 元の文字列開始添字のレコードパリンドローム最長サブ
            }
 
            
        } 
        ANS - ; // 除去効果#は、対称エッジとしてもたらさ
        戻り s.substring(T、T + ANS); 
    } 
}

 

 

 

おすすめ

転載: www.cnblogs.com/shoulinniao/p/12331147.html