文字を繰り返すことなく、[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。