package main import ( "fmt" ) func main() { var a string fmt.Scan(&a) start,end := 0,0 for i:=0;i<len(a);i++{ // 奇数对称 abcab l1,r1 := expondAroundCentent(i, i, a) if r1 - l1 > end - start{ start,end = l1,r1 } // 偶数对称 abab l2,r2 := expondAroundCentent(i, i+1, a) if r2 - l2 > end - start{ start,end = l2,r2 } } //fmt.Println(end) fmt.Println(end-start+1) // 长度是+1 细节 } // 中心扩散对比法 func expondAroundCentent(left int,right int,s string)(int,int){ for ; left >= 0 && right < len(s) && s[left] == s[right]; left,right = left-1,right+1{} // 退出条件时left 多加了1要减去 return left+1,right-1 }
中心扩散法,区分奇数对称还是偶数对称