题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
import java.util.Scanner;
//最长回文子串的长度问题。
//思路:
/**
1, 通过双重for循环,对字符串进行截取并反转,和截取的字符串进行对比是否一样
*/
//暴力解法,未优化版本,运行会超时
// public class Main {
// public static void main(String[] args) {
// Scanner in = new Scanner(System.in);
// String s = in.nextLine();
// int maxLen = 0;
// for (int i = 0; i < s.length(); i++) {
// for (int j = s.length(); j > i; j--) {
// String subStr = s.substring(i, j);
// if (subStr.equals(new StringBuilder(subStr).reverse().toString())) {
// if (subStr.length() >= maxLen) {
// maxLen = subStr.length();
// }
// }
// }
// }
// System.out.println(maxLen);
// }
// }
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
int maxLen = 0;
for (int i = 0; i < s.length(); i++) {
for (int j = s.length()-1; j > i; j--) {
//优化开始
int a = i;
int b = j;
//找到相同的元素,继续往里比较,直到相遇,或者相邻,因为回文有两种形式,aba, abbc
while (s.charAt(a) == s.charAt(b)) {
//直到以下条件
if (a == b || b - a == 1) {
//求最大长度
maxLen = (j - i + 1) >= maxLen ? j - i + 1 : maxLen;
break;
}
//指针继续缩小范围比较
a++;
b--;
}
//如果没有已知的最长长直接跳出循环
if (j - i <= maxLen) {
break;
}
}
}
System.out.println(maxLen);
}
}

