package q5 // Note: Although it can be done in O(N) with, e.g., Manacher's algorithm, the // input size is small enough to brute-force. func expand(s string, l, r int) (int, int) { for l > 0 && r < len(s)-1 && s[l-1] == s[r+1] { l-- r++ } return l, r } func longestPalindrome(s string) string { maxLen, mL, mR := 0, 0, 0 for c := range len(s) { l, r := expand(s, c, c) len_ := r - l + 1 if len_ > maxLen { maxLen, mL, mR = len_, l, r } } for c := range len(s) - 1 { if s[c] == s[c+1] { l, r := expand(s, c, c+1) len_ := r - l + 1 if len_ > maxLen { maxLen, mL, mR = len_, l, r } } } return s[mL : mR+1] } var _ = longestPalindrome