题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
/**
* 动态规划
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()){
String input = in.nextLine();
char[] chars = input.toCharArray();
int len = input.length();
int result = 1;
int[][] dp = new int[len+1][len+1];
for(int i=0; i<len; i++){
dp[i][i] = 1;
}
for(int i=0; i<len-1; i++){
if(chars[i] == chars[i+1]){
dp[i][i+1] = 2;
}
}
for(int k=2; k<len; k++){
for(int i=0; i+k<len; i++){
// 左右两边字符相同 且 之间子串为回文串
if(chars[i] == chars[i+k] && dp[i+1][i+k-1]>=1){
// 回文串 长度+2
dp[i][i+k] = dp[i+1][i+k-1]+2;
}else{
// 非回文串
dp[i][i+k] = 0;
}
result = Math.max(result, dp[i][i+k]);
}
}
System.out.println(result);
}
}
// /**
// * reverse() time exceed
// * @param args
// */
// public static void main(String[] args) {
// Scanner in = new Scanner(System.in);
//
// while (in.hasNext()){
// String input = in.nextLine();
//
// int len = input.length();
// int result = 1;
//
// for(int i=0; i<len; i++){
// for(int j=len; j>i; j--){
// if(isReverse(input.substring(i,j))){
// result = Math.max(result, j-i);
// }
// }
// }
//
// System.out.print(result);
// }
// }
//
// private static boolean isReverse(String str){
//
// return str.equals(new StringBuilder(str).reverse().toString());
// }
}