题解 | #密码截取# 分类讨论,使用一维dp数组
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
char[] arr = str.toCharArray();
int n = arr.length;
int[] dp = new int[n];//dp[i]表示arr[i]结尾的最大有效密码串长度
//初始化
for (int i = 0; i < n; i++) {
dp[i] = 1;
}
int max = 0;
//一大堆分类讨论,比较繁琐,因为一开始没想出原来用二维dp数组
for (int i = 1; i < n; i++) {
if (dp[i - 1] == 1) {
//AA
if (arr[i] == arr[i - 1]) {
dp[i] = 2;
}
//ABA
if (i - 2 >= 0 && arr[i] == arr[i - 2]) {
dp[i] = 3;
}
} else {
//AAA
if (i - 2 >= 0 && arr[i] == arr[i - 2]) {
dp[i] = 3;
}
int left = i - dp[i - 1] - 1;
//AAAA
if (dp[i - 1] == 3 && arr[i - 1] == arr[i - 2] && arr[i] == arr[i - 1]) {
dp[i] = 4;
}
//通用情况, A[...]A
if (left >= 0 && arr[left] == arr[i]) {
dp[i] = dp[i - 1] + 2;
}
}
max = Math.max(max, dp[i]);
}
System.out.println(max);
}
}
海康威视公司福利 1404人发布
查看1道真题和解析
