题目
题目链接
https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af
思路
假设字符串长度为n,那么从0开始遍历到n-1,针对每一个下标i,
从i开始,检查回文串长度。检查步骤为:
1. 从i开始往两边扩展开来计算回文串长度
2. 从i,i+1 往两边扩展开计算回文长度,比如 i位置为a,i+1位置也为a的情况
参考答案
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
public int getLongestPalindrome (String A) {
char[] str = A.toCharArray();
int maxLen = 0, curLen;
String maxStr = "", curStr;
for (int i = 0; i < str.length; i++) {
curStr = expand(str, i, i);
curLen = curStr.length();
if (curLen > maxLen) {
maxLen = curLen;
maxStr = curStr;
}
curStr = expand(str, i, i + 1); //偶数回文有2个中点
curLen = curStr.length();
if (curLen > maxLen) {
maxLen = curLen;
maxStr = curStr;
}
}
//maxStr 是最长的回文串
return maxLen;
}
public static String expand(char[] arr, int l, int r) {
while (l >= 0 && r < arr.length && (arr[l] == arr[r])) {
l--;
r++;
}
StringBuilder sb = new StringBuilder();
for (int i = l + 1; i < r; i++) {
sb.append(arr[i]);
}
return sb.toString();
}
}