funclongestPalindrome(s string)string{
n :=len(s)
maxLength,logest :=0,""for i :=0;i<n;i++{for j:=i+1;j<=n;j++{ifisPalindrome(s[i:j])&& j-i > maxLength{
maxLength = j-i
logest = s[i:j]}}}return logest
}funcisPalindrome(s string)bool{
n :=len(s)for i :=0;i<n/2;i++{if s[i]!= s[n-1-i]{returnfalse}}returntrue}
动态规划,时间和空间复杂度O(N^2)
funclongestPalindrome(s string)string{
n :=len(s)if n ==0{return s
}// dp [i][j]表示 s[i:j+1]是否是回文串// dp [i][j] = s[i] == s[j] && dp[i+1][j-1]// 所以计算 dp[i][j]时一定要提前计算dp[i+1][j-1],所以i应当是从大到小,j是从小到大,且j>i
dp :=make([][]bool,n)for i:=0;i<n;i++{
dp[i]=make([]bool,n)
dp[i][i]=true}
maxLen,start :=1,0for i := n-1;i>=0;i--{for j:=i+1;j<n;j++{
dp[i][j]=(s[i]==s[j])&&(j-i<3|| dp[i+1][j-1])if dp[i][j]{if j-i+1> maxLen{
maxLen = j-i+1
start = i
}}}}return s[start:start+maxLen]}funcisPalindrome(s string)bool{
n :=len(s)for i :=0;i<n/2;i++{if s[i]!= s[n-1-i]{returnfalse}}returntrue}
中心扩展,时间复杂度O(N^2),空间复杂度O(1)
funclongestPalindrome(s string)string{
n :=len(s)if n ==0{return""}var start,end intfor i :=0;i< n;i++{
len1,len2 :=expand(s,i,i),expand(s,i,i+1)len:=max(len1,len2)iflen> end - start {
start = i-(len-1)/2
end = i +len/2}}return s[start:end+1]}funcmax(x,y int)int{if x > y {return x
}return y
}funcexpand(s string,l,r int)int{
n :=len(s)for l >=0&& r < n && s[l]== s[r]{
l,r = l-1,r+1}return r - l -1}
leetcode 5. 最长回文子串暴力,时间复杂度O(N^3)func longestPalindrome(s string) string { n := len(s) maxLength,logest := 0,"" for i :=0;i<n;i++{ for j:=i+1;j<=n;j++{ if isPa...