题目:对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。示例1
输入:"abc1234321ab",12
输出:7
这道题之前也遇到过,这次做的时候又忘记了一个点,回文的格式有两种, "a" 和 “aa” 这两种格式,在写的时候只想到了 "a" ,用例通过了一部分,才发现漏了一种情况,对于回文的判断,以当前字符为中心,使用双指针向左右两边进行扩展比较,然后判断以当前为中心的字符所能构成的最大回文的长度,使用max来进行更新即可。
完整代码如下:
import java.util.*;
public class Solution {
public int getLongestPalindrome(String A, int n) {
// write code here
int max = 0;
for(int i=0;i<A.length();i++) {
int now = Math.max(searchHW1(A, i), searchHW2(A, i));
if(max<now) {
max = now;
}
}
return max;
}
public int searchHW1(String A,int k) {
int i=k;
int j=k;
while(i>=0&&j<A.length()&&A.charAt(i)==A.charAt(j)) {
i--;
j++;
}
return j-i-1;
}
public int searchHW2(String A,int k) {
int i=k;
int j=k+1;
while(i>=0&&j<A.length()&&A.charAt(i)==A.charAt(j)) {
i--;
j++;
}
return j-i-1;
}
}