思路
1.因为可能是aba这种奇数的,可能是abba这种偶数的,先统一处理为加“#”分割aba=>#a#b#a# ,abba = #a#b#b#a#这样可以统一成奇数处理
2.以每一个字符为开始,向两边伸展,(相等继续,不相等中止)记录为半径,半径最大的就是最长的回文。
func longestPalindrome(s string) string {
slice := make([]string,0,4)
for _ , char := range s {
slice = append(slice,"#")
slice = append(slice,string(char))
}
slice = append(slice,"#") //先把字符串加上“#”
maxR := 0 //记录最长的半径
maxIndex := 0 //记录最长的 index
sliceLen := len(slice)
for index , _ := range slice{
if(index >=1){
r := 0
i := index - 1
j := index + 1
for { //每一个字符 计算最长的半径
if i<0 || j >= sliceLen{
break
}
if(slice[i] == slice[j]){
r++
i--
j++
}else{
break
}
}
if r > maxR{
maxR = r
maxIndex = index
}
}
}
res := ""
for index,str := range slice{ //maxIndex-maxR到maxIndex+maxR是最长串
if index >= (maxIndex-maxR) && index <= (maxIndex+maxR) && str != "#"{
res += str
}
}
return res
}