蓝桥杯历年真题题目及题解目录汇总
题目链接:https://www.dotcpp.com/oj/problem1816.html
题目描述
作为 drd 的好朋友,技术男 atm 在 drd 生日时送给他一个超长字符串 S 。atm 要 drd 在其中找出一个最长的字符串 T ,使得 T 在 S 中至少出现了两次,而他想说的秘密就藏在 T 中。
由于字符串实在是太长了,drd 总是找不到合适的 T 。于是 drd 请你帮他找到这个 T 的长度。
输入
一行。一个字符串,即题目中说的S 。
输出
一行。一个整数,表示最长的 T 的长度。
样例输入
ababa
样例输出
3
从最大长度枚举,用map记录字串出现的次数,如果出现2次就打印,并且return,break不能简单的结束2个for的循环
import java.util.HashMap;
import java.util.Scanner;
public class 重复模式 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next();
String x = "";
HashMap<String, Integer> map = new HashMap<>();
int n = s.length();
for(int i=n;i>=1;i--) {
map.clear();//算是一个优化,把没用的清空,免得map的size太大
for(int j=0;j+i<=n;j++) {
x = s.substring(j, j+i);
if(!map.containsKey(x))
map.put(x, 1);
else
map.put(x, 1+map.get(x));
if(map.get(x)>=2) {
System.out.println(i);
return;
}
}
}
}
}