题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 最长回文子串
*/
public class Main {
public static void main(String[] args) {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String a;
try {
a = r.readLine();
} catch (IOException e) {
throw new RuntimeException(e);
}
char[] chs = a.toCharArray();
int i = 0, m, n, l, ans;
l = chs.length;
int[] dp = new int[l];
do {//当回文字串长度是奇数
m = i;
n = i;
ans = -1;
do {
if (chs[m] == chs[n]) ans += 2;//初始长度为1
else break;//否则跳出遍历寻找
m++;
n--;
} while (m < l && n > -1);
dp[i] = ans;
i++;
} while (i < l);
if (l == 1) {//总的字符串长度是1,直接返回1
System.out.print(1);
return;
}
i = 0;
do {//偶数
m = i + 1;
n = i;
ans = 0;
do {
if (chs[m] == chs[n]) ans += 2;//偶数初始为0,之后加2
else break;//否则跳出遍历寻找
m++;
n--;
} while (m < l && n > -1);
dp[i] = Math.max(ans, dp[i]);
i++;
} while (i < l - 1);
i = 0;
ans = 0;
do {
ans = Math.max(ans, dp[i]);
i++;
} while (i < l - 1);
System.out.print(ans);
}
}

查看8道真题和解析