描述
对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。
示例1
输入:
"abc1234321ab",12
返回值:
分析
此处使用一个双指针的办法解决问题,每次寻找当前位置的最长回文串,如果当前位置的回文串大于记录值,则更新。需要注意的是此处应考虑数组越界问题,将奇数串和偶数串分开讨论。
import java.util.*;
public class Solution {
int len = 0;
public int getLongestPalindrome(String A, int n) {
// write code here
for(int i = 0; i < n; i++) {
subLong(A,i,i);
}
for(int i = 0; i < n - 1; i++) {
subLong(A,i, i+1);
}
return len;
}
public void subLong(String str, int start, int end) {
while(start >= 0 && end < str.length() && (str.charAt(start) == str.charAt(end))) {
len = Math.max(len,end-start+1);
start--;
end++;
}
}
}