题目描述

public class Main {
   
	public static void main(String[] args) {
   
		Scanner reader = new Scanner(System.in);
		int L = reader.nextInt();
		String S = reader.next();
		LinkedHashMap<String, Integer> memo = new LinkedHashMap<>();
		//将所有的情况以及出现的次数都记录在map集合里
		for (; L <= S.length(); L++) {
   
			for (int i = 0; i <= S.length() - L; i++) {
   
				String x = S.substring(i, i + L);
				int frep = memo.getOrDefault(x, 0);
				memo.put(x, frep + 1);
			}
		}
		// 获取出现的最大频率
		int maxFreq = Integer.MIN_VALUE;
		for (String in : memo.keySet()) {
   
			if (memo.get(in) > maxFreq) {
   
				maxFreq = memo.get(in);
			}
		}
		//移除出现次数小于最大值的数据
		Iterator<Map.Entry<String, Integer>> iterator = memo.entrySet().iterator();
		while (iterator.hasNext()) {
   
			Map.Entry<String, Integer> m = iterator.next();
			if (m.getValue()< maxFreq) {
   
				iterator.remove();
			}
		}
		//集合的长度,同时也是数组的长度
		int memoSize = memo.size();
		String[] res = new String[memoSize];
		int k = 0;
		// 最大的长度
		int maxLength = Integer.MIN_VALUE;
		for (Map.Entry<String, Integer> entry : memo.entrySet()) {
   
			//获取最大长度
			if(entry.getKey().length()>maxLength) {
   
				maxLength=entry.getKey().length();
			}
			//放进集合中
			res[k] = entry.getKey();
			k++;
		}
		// 只有一个结果
		if (memoSize == 1) {
   
			System.out.println(res[0]);
			return;
		}
		// 存在多个的话,直接输入第一个就ok(break)
		int resIndex = 0;
		for (int i = 0; i < memoSize; i++) {
   
			if (res[i].length() == maxLength) {
   
				resIndex = i;
				break;
			}
		}
		System.out.println(res[resIndex]);
	}