题解 | #密码截取#
密码截取
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);
String line = in.nextLine();
int[][] maxLen = new int[line.length()][line.length()];
for (int i = 0; i < line.length(); i++) {
maxLen[i][i] = 1;
if (i > 0 && line.charAt(i) == line.charAt(i - 1)) {
maxLen[i-1][i] = 2;
}
else if (i > 0 && line.charAt(i) != line.charAt(i - 1)) {
maxLen[i-1][i] = 1;
}
}
for (int i = 2; i < line.length(); i++) {
for (int j = 0; j + i < line.length(); j++) {
if (line.charAt(j) == line.charAt(j + i) && maxLen[j + 1][j + i - 1] == i - 1) {
maxLen[j][j+i] = i + 1;
}
else {
if (maxLen[j][j+i-1] > maxLen[j+1][j+i]) {
maxLen[j][j+i] = maxLen[j][j+i-1];
}
else {
maxLen[j][j+i] = maxLen[j+1][j+i];
}
}
}
}
System.out.println(maxLen[0][line.length() - 1]);
}
}
maxLen[i][j]为str[i,j]内部最长对称字串
若c[i]==c[j], 且str[i+1, j-1]为对称字串,则str[i,j]也为对称字串
若c[i]!=c[j],则maxLen[i][j] = max{ maxLen[i+1][j], maxLen[i][j-1] }
