穷举每一种场景
数组下标取值为[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
}


京公网安备 11010502036488号