题目5:最长回文子串
题目描述:
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
题解:
首先需要了解什么叫回文子串,回文子串中最核心的是最中间的字符很明显回文是以中心向四周扩散的,因此我们只需挨个遍历,并以每个字符为中心向两端扩散,通过判断两端的字符是否相同来判断回文串的长度。
func longestPalindrome(s string) string {
var res int
l, r, pl, pr := 0, 0, 0, 0
for i := 0;i<len(s);i++{
//奇数长度的回文
l = i - 1
r = i + 1
for l >= 0 && r < len(s) && s[l]==s[r]{
l--
r++
}
// res = max(res, r-l-1)
if r-l-1 >res{
pl = l+1
pr = r-1
res = r-l -1
}
//偶数长度的回文
l = i
r = i+1
for l >= 0 && r < len(s) && s[l]==s[r]{
l--
r++
}
// res = max(res, r-l-1)
if r-l-1 >res{
pl = l+1
pr = r-1
res = r-l -1
}
}
return s[pl:pr+1]
}