Medium
Given a string s, return the longest palindromic substring in s.
Example 1:
Input: s = “babad”
Output: “bab”
Explanation: “aba” is also a valid answer.
Example 2:
Input: s = “cbbd”
Output: “bb”
Constraints:
1 <= s.length <= 1000s consist of only digits and English letters.func longestPalindrome(s string) string {
	newStr := make([]byte, len(s)*2+1)
	newStr[0] = '#'
	for i := 0; i < len(s); i++ {
		newStr[2*i+1] = s[i]
		newStr[2*i+2] = '#'
	}
	dp := make([]int, len(newStr))
	friendCenter, friendRadius := 0, 0
	lpsCenter, lpsRadius := 0, 0
	for i := 0; i < len(newStr); i++ {
		if friendCenter+friendRadius > i {
			dp[i] = min(dp[2*friendCenter-i], (friendCenter+friendRadius)-i)
		} else {
			dp[i] = 1
		}
		for i+dp[i] < len(newStr) && i-dp[i] >= 0 && newStr[i+dp[i]] == newStr[i-dp[i]] {
			dp[i]++
		}
		if friendCenter+friendRadius < i+dp[i] {
			friendCenter, friendRadius = i, dp[i]
		}
		if lpsRadius < dp[i] {
			lpsCenter, lpsRadius = i, dp[i]
		}
	}
	return s[(lpsCenter-lpsRadius+1)/2 : (lpsCenter+lpsRadius-1)/2]
}
func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}