题解 | #密码截取#
密码截取
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); } }