蓝桥杯算法训练(java)-字符统计

字符统计

问题描述

  给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。

输入格式

  第一行一个数字L。
  第二行是字符串S。
  L大于0,且不超过S的长度。

输出格式

  一行,题目要求的字符串。

  输入样例1:
  4
  bbaabbaaaaa

  输出样例1:
  bbaa

  输入样例2:
  2
  bbaabbaaaaa

  输出样例2:
  aa

数据规模和约定

  n<=60
  S中所有字符都是小写英文字母。

解题思路

暴力杯的解题思路,依次查找字符串长度大于等于l的子串的出现次数,选取出出现次数最多的字串(最先),出现次数相同则找最长的子串。

java解题代码

import java.util.Scanner;
public class Main {
	private String subString;
	private int maxCount ;
	public Main() {
		subString = "";
		maxCount = 0;
	}
	public static void main(String[] args) {
		Main main = new Main();
		
		main.get();
	}
	/**
	 * 1、输入子串长度l,与字符串s
	 * 2、从第一个字串开始,在字符串中查找 出现的次数。
	 * 3、从 str(s,s+l-1)的字串比较,相同则count++。
	 */
	private void get() {
		Scanner in = new Scanner(System.in);
		int l = in.nextInt();
		String string = in.next();
		getSovle(l,string);
		in.close();
	}
	private void getSovle(int l1,String string) {
		int length = string.length();
		for(int l = l1;l<=length;l++) {
			for(int i = 0;i<length-l+1;i++) {
				String string2 = string.substring(i,i+l);
				int count = 0;
				for(int j = 0;j<length-l+1;j++) {
					String string3 = string.substring(j,j+l);
					if(string2.equals(string3)) {
						count++;
					}
				}
				if(count==maxCount&&l>subString.length()) {
					maxCount = count;
					subString = string2;
				}else if(count>maxCount) {
					maxCount = count;
					subString = string2;
				}
			}
		}
		System.out.println(subString);
	}
}

猜你喜欢

转载自blog.csdn.net/hnust_yangjieyu/article/details/83870965