字串统计-map

℡╲_俬逩灬. 提交于 2020-03-03 10:07:03

问题描述

给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
  第一行一个数字L。
  第二行是字符串S。
  L大于0,且不超过S的长度。
输出格式
  一行,题目要求的字符串。

输入样例1:
  4
  bbaabbaaaaa

输出样例1:
  bbaa

输入样例2:
  2
  bbaabbaaaaa

输出样例2:
  aa
数据规模和约定
  n<=60
  S中所有字符都是小写英文字母


import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class map {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int L=sc.nextInt();
        String str=sc.next();
        String max="";
        int count=0;
        Map<String,Integer> map=new HashMap<>();
        for (int i = L; i <=str.length() ; i++) {
            for (int j = 0; j <str.length()-i ; j++) {
                String s1="";
                s1=str.substring(j,j+i);
                if(map.size()==0) {
                    count=1;
                    max=s1;
                    map.put(s1, 1);
                }else {
                    if(map.containsKey(s1)) {
                        int g=map.get(s1);//获取hashmap集合中s1对应的值(个数)
                        g++;
                        map.put(s1, g);//返回更改后的键值,集合刷新
                        if(g>count) {//输出子串出现次数最多的
                            count=g;
                            max=s1;
                        }else if(g==count) {//如果有多个出现次数一样的子串,输出最长的
                            if(s1.length()>max.length()) {
                                max=s1;
                            }
                        }
                    }else {
                        map.put(s1, 1);
                    }
                }

            }
        }
        System.out.println(max);
    }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!