leetcode длинный палиндром

Дана строка 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
}

рекомендация

отwww.cnblogs.com/yiyezhou/p/10939063.html