穷举每一种场景
数组下标取值为[0,...,len-1]
当前下标为index,我们考虑两种情况

  • index节点为对称轴节点 [...,1,2,1,...]
  • index节点为对称轴左边第一个节点,对称轴不在节点上 [...,1,1,...]
package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param A string字符串 
 * @param n int整型 
 * @return int整型
*/
// 最长回文子串
func getLongestPalindrome(A string, n int) int {
    if n < 2 {
        return 1
    }
    maxLen := 0
    runes := []rune(A)
    for i := 0; i < n; i++ {
        for j := 0; j < i; j++ {
            // 奇  aba
            // 假设当前位置满足,那么必须要长度大于已经得到的最大长度才进行赋值
            // 切片不能越界
            // 比较当前位置两边的等长切片是否满足对称数组
            if maxLen < 2*(i-j)+1 && 2*i-j+1 <= n && isT(runes[j:i], runes[i+1:2*i-j+1]) {
                maxLen = 2*(i-j) + 1
            }
            // 偶  abba
            if maxLen < 2*(i-j) && 2*i-j <= n && isT(runes[j:i], runes[i:2*i-j]) {
                maxLen = 2 * (i - j)
            }
        }
    }
    return maxLen
}

// a、b是否为对称数组,[1,2,3]与[3,2,1]对称
func isT(a []rune, b []rune) bool {
    arrLength := len(a)
    for i, j := 0, arrLength-1; i < arrLength; i, j = i+1, j-1 {
        if a[i] != b[j] {
            return false
        }
    }
    return true
}