原题链接:5. 最长回文子串
思路:
最长回文子串如果存在,那么一定有个中心点向两边扩展,左右边界相等,才能组成回文子串
因为存在奇数和偶数回文串之分,所以两种情况都要考虑到
利用这个思路,可以使用两个指针,不断的根据中心点,左右两边同时向外扩展,相等则继续扩展
不相等则代表结束了回文子串的遍历,此时比较长度是否为最长子串
是则更新,最终返回res即可
代码如下:
func longestPalindrome(s string) string {
res:=""
p := func(l,r int)string{
for l >=0 && r< len(s) && s[l] == s[r]{
//左右边界有效且相等时,为回文串,继续扩展直到不满足条件
l--
r++
}
//回文串在s[l+1:r]中
return s[l+1:r]
}
//遍历每个字符,以它为中心尝试扩展回文
for i :=0; i <len(s);i++{
s1 :=p(i,i)//检查以S[i]为中心的奇数长度回文串
s2 :=p(i,i+1)//检查以s[i]和s[i+1]为中心的偶数长度回文串
if len(s1) > len(res){//如果s1比当前长度长,则更新
res = s1
}
if len(s2) > len(res){//如果s2比当前长度长,则更新
res = s2
}
}
return res//返回
}