Дана строка S, S, чтобы найти самую длинную подстроку-палиндром. Можно предположить, что максимальная длина 1000 с.
Пример 1:
Введите: «Бабад» Выход: «бабы» Примечание: «аба» является действительным ответом.
Пример 2:
Введите: «cbbd» Выход: «бб»
Метод расширения Центра
Реализация кода:
пакет основного
импорта (
"математика"
"FMT"
)
FUNC Основные () {
вар ул = "cbbd"
вар палиндром = longestPalindrome (ул)
fmt.Println (палиндром)
}
FUNC (строки S) longestPalindrome строка {
обр: = [] байты (ы)
длина: = Len (обр) ,
если длина == 0 || Длина == 1 {
возвращение s
}
старт вар, конец, mlen = 0, 0, 0
для г: = 0; я <длина; я ++ {
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 {
начать = я - (mlen - 1) / 2
конец = I + mlen / 2
}
}
Возвращение строка (обр [Начало: Конец + 1])
}
FUNC expendaroundcenter (ей строки, слева INT, справа INT) INT {
обр: = [] байт (ы)
л: = левый
г: = правый
для {
// fmt.Printf ( "г:% дл:% d \ п", г, л) ,
если л> = 0 && г <Len (обр) && обр [л] == обр [г] {
л -
г ++
} еще {
перерыва
}
}
возвращение г - л - 1
}