文字列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
}