[LeetCode] 5.最長サブストリング最長のサブストリングパリンドローム文字を繰り返すことなく

 

文字を繰り返すことなく、[LeetCode] 5.最長サブストリング

文字列が与えられ、S、最長の回文構造部分文字列を見つけるのをあなたは、最大長さと仮定してよいのは 1000年です。

例1:

入力:「babad」
 出力:「BAB」
 注:「ABA」も有効な回答です。

例2:

INPUT:「cbbd」
 出力:「BB」



のアイデア:センター拡散法

 


パリティに2例に対応するパリンドローム配列は、2つの拡散は現在の位置から、そこに存在し、そして二つの数字スタートの間、同じ位置がより対称的です

1  クラスソリューション{
 2      公共文字longestPalindrome(文字列S){
 3。         IF(s.length()<1。){          
 4。             復帰 "" 、              
 5          }
 6。         INT START = 0 ; //最初の添字結果文字列、および最終的に下を通ります標準の主流から取ら返し
 7。         int型のエンド= 0 ;  
 8が         ためint型 = 0 Iを、Iはs.lengthを(<); Iは++ ){
 9              int型 LEN1 = ジャッジ(S、I、I); //拡散1 :現在の位置から、奇数に対応する
 10              INT LEN2ジャッジ=(S、I、I + 1。); //拡散2:2つの偶数番号に対応するとの間の数から出発
 。11              INT MAX_LEN = Math.max(LEN1、LEN2);
 12である             IF(MAX_LEN>エンド-スタート+ 1 ){
 13は、                  スタート= I - ( 1-MAX_LEN)/ 2 ;▲を説明
 14                  I + / 2 =エンドMAX_LEN ;
 15              }
 16          }
 17          リターン s.substring(開始、終了+ 1 );
 18である     }
 。19  
20は、     公衆 INTジャッジ(S文字列、int型、左int型右){        
21は int型 = L左; 22である INT R&LT = 右; 23は 、一方(== L> = 0 && R&LT <s.length()&& s.charAt(L)s.charAt(R&LT)){ 24 、L - 25 R&LT ++ ; ている26 } 27 リターン RL- 1。; //終了インデックスは、長さがRL + 1を返すべきされるが、L、Rの端部がそれぞれアウトずれている場合には、長さがなければならない1-RL。 28 } 29 }

 


ストリング、エンド添字および添字センター長の方法によって得られた配列:



リストの長さが奇数であるか偶数、中心位置が同じであるかどうか。


 

I +(長-1)/ 2 =開始。

端= I =長さ/ 2。

















おすすめ

転載: www.cnblogs.com/Poceer/p/10944430.html