求字符串中出现次数最多的字符

/**
一个字符串中可能包含a~z中多个字符串,并且可能会有重复,如 String data =”abcdaaa”,
这道字符串出现次数最多的字母就是a,出现了4次。现在用户输入一个字符串,我们需要求出出现次数最多的字母,
并且求出次数,如果存在字母中出现最多的次数不唯一,但所有出现次数最多的字母及次数都要打印出来。
输入:输入是一行字符串,就是我们所需统计的字符串,例如我们输入 “abcabd”
输出:输出是出现次数最多的字母以及出现次数,二者用空格分开,如果出现最多次数的字母不唯一,按照字母在字符串中出现的顺序,
把所有结果打印出来,用换行符将每一行的字母和次数分开

样例输入
abcabd

样例输出
a 2
b 2

样例输入
babbaca
样例输出
b 3
a 3

*/

import java.util.Collection; 
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);//键盘录入
        String s=sc.nextLine();
        char [] chs=s.toCharArray();//将字符串转换为字符数组

        Map char_int=new HashMap<Character,Integer>();//定义一个map集合
        for (char c : chs) {
            if(!char_int.containsKey(c)){//若集合中没有该键
                int  count=0;//每一个字符出现次数的计数变量
                for (char ch : chs) {
                    if(c==ch){
                        count++;
                        //将每一个字符及该字符出现的次数以键值对的方式存储在map集合char_int里
                        char_int.put(c, count);
                    }//if
                }//for
            }//if
        }//for

        Collection<Integer> values=char_int.values();//获取集合中所有值的集合

        Integer max=0;//最大值变量
        for (Integer value : values) {//寻找最大值,也就是出现最多的次数
            if(value>=max){
                max=value;
            }
        }

        //定义一个TreeSet集合(自动排序)
        TreeSet<Integer> ts=new TreeSet<Integer>();
        //获取char_int集合里所有键的集合
        Set<Character> set=char_int.keySet();
        for (Character key : set) {
            //由键取值
            Integer value=(Integer) char_int.get(key);
            if(max==value){
                /**
                 * 如果字符出现最大次数等于该键的值,
                 * 就把原来字符串中该键的索引存在TreeSet集合ts里,
                 * 由键(出现次数最多的字符)得到出现次数最多的字符  在原字符串中的索引
                 * 如果出现最多次数的字母不唯一,也可以按照字母在字符串中出现的顺序,
                 * 把所有结果打印出来,用换行符将每一行的字母和次数分开
                 */
                ts.add(s.indexOf((char)key));
            }
        }

        //输出
        for (Integer index : ts) {
            System.out.println(chs[(int)index]+" "+max);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36442947/article/details/78044479