题目要求
分析
题意呢,比较迷惑,我看了很久才知道啥意思,这里有两种版本的解读,意思是一样的:
- 找到在该字符串中只出现一次的、满足所有长度为k 的、子串,求 k 的最小值。
- 找到在该字符串中出现两次(或以上)的、完全相等的、长度为k-1的子串,求k的最大值。
与子串相关,下面的代码按照思路2写的。
题外话,子串问题建议了解KMP算法(挺难懂的一个算法)……溜……
AC代码(Java语言描述)
import java.util.Scanner;
public class Main {
private static char[] chars;
private static int count(int i, int j, int num, int sum) {
if(i < num && j < num && chars[i] == chars[j]) {
return count(i+1, j+1, num, ++sum);
}
return sum;
}
·
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = Integer.parseInt(scanner.nextLine());
chars = scanner.nextLine().toCharArray();
scanner.close();
int counter = 0;
for(int i = 0; i < num; i++) {
for(int j = i+1; j < num; j++) {
int sum = count(i, j, num, 0);
if(sum > counter) {
counter = sum;
}
}
}
System.out.println(counter+1);
}
}