题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while(in.hasNextLine()){
String s = in.nextLine();
int n = s.length();
int maxLen = 0;
for(int i=0 ; i<n ; ++i){
int a = expand(s, i, i); //考虑奇数
int b = expand(s,i,i+1); //考虑偶数情况
maxLen = Math.max(maxLen, Math.max(a,b));
}
//System.out.println(maxLen);
dp(s);
}
}
public static int expand(String s, int left, int right){
while(left>=0 && right<s.length()){
char cL = s.charAt(left);
char cR = s.charAt(right);
if(cL == cR){
--left;
++right;
}
else{
break;
}
}
return right-left-1;
}
public static void dp(String s){
int n = s.length();
boolean[][] dp = new boolean[n][n];
for(int i=0 ; i<n ; ++i){
dp[i][i] = true;
}
int maxLen = 1;
for(int l=2 ; l<=n ; ++l){ //判断长度
for(int i=0 ; i<n-l+1 ; ++i){
char cL = s.charAt(i);
char cR = s.charAt(i+l-1);
if(cL == cR){
if(l<=3){
dp[i][i+l-1] = true;
}
else{
dp[i][i+l-1] = dp[i+1][i+l-2];
}
}
else{
dp[i][i+l-1] = false;
}
if(dp[i][i+l-1]){
maxLen = Math.max(l, maxLen);
}
}
}
System.out.println(maxLen);
}
}
