leetcode最長の回文

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

例1:

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

例2:

入力: "cbbd" 出力: "BB" 

 

センターの拡張方法

コードの実装:

パッケージメイン

インポート(
"数学"
   "FMT"


FUNCメイン(){
VAR STR = "cbbd"
VARパリンドローム= longestPalindrome(STR)
   fmt.Println(パリンドローム)
}

longestPalindrome(複数列)FUNC列{
    ARR:= []バイト(S)
    長さ:= LEN(ARR)
の長さ== 0 ||もし 長さ== 1 {
戻りS
    }

= 0 MLEN VAR開始、終了、0,0
iについて:= 0; 私は長さを<; I ++ {
      len_1:= expendaroundcenter(S、I、I)
      len_2:= expendaroundcenter(S、I、I + 1)
      MLEN = INT(math.Max(のfloat64(len_1)のfloat64(len_2)))
MLEN場合>終了-開始+ 1 {
         iが=開始- (MLEN - 1)/ 2
端= I + MLEN / 2
}
    }
戻り列(ARRは、[スタート:終了+ 1])
}

FUNCのexpendaroundcenter(INTを左の列、右INT)INT {

   ARR:= []バイト(S)
   、L =左
   、R =右
{ため
// fmt.Printf( "R:%のDL:%Dを\ n"、R、L)の
場合は、L> = 0 && R <LEN(ARR)&& ARR [L] == ARR [R] {
         1 -
         R ++
      }他{
ブレーク
}
   }
戻りR - L - 1
}

おすすめ

転載: www.cnblogs.com/yiyezhou/p/10939063.html