题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af
暴力解法,时间复杂度O(n^2) 空间复杂度O(1);
public int getLongestPalindrome(String A, int n) {
// write code here
int max=0;
for(int i=0;i<n;i++){ //遍历每个字符,每次都把当前字符当做回文的中心
int sin=0; //奇数回文字符串的长度
int dou=0; //偶数回文字符串的长度
for(int j=1;j<A.length();j++){ //奇数处理
int pre = i-j; //当前字符的第前j个
int next = i+j; //当前字符的第后j个
if(pre<0||next>=A.length()){ //越界则跳出当前循环
break;
}
if(A.charAt(pre)==A.charAt(next)){//前后第j个相等则数量++
sin++;
}else { //否则就跳出当前循环
break;
}
}
for(int j=1;j<A.length();j++){ //当做偶数,做同样的处理
int pre = i-j+1;
int next = i+j;
if(pre<0||next>=A.length()){
break;
}
if(A.charAt(pre)==A.charAt(next)){
dou++;
}else {
break;
}
}
max=Math.max(max,Math.max(2*sin+1,2*dou));//比较后更新最大值
}
return max;
}
查看3道真题和解析