[华为机试] 找字符串中出现次数最多的字符

题目:给定一个长度不限的字符串,请找出该字符串中出现次数最多的那个字符,并打印出该字符及其出现次数;如果多的字符的出现次数相同,只打印首个字符;输出字符的大小写格式要与输入保持一致,大小写不敏感模式下,输出字符的大小写格式与该字符首次出现时的大小写格式一致。实现时无需考虑非法输入。

代码:

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;

public class MaxCountChar {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        boolean caseSensitive = scanner.nextBoolean();
        sort(s.toCharArray(),caseSensitive);
        scanner.close();
    }
    
    public static void sort(char[] cs, boolean caseSensitive){
        Map<Character,Integer> map = new LinkedHashMap<Character,Integer>();
        if(caseSensitive){
            for(Character c : cs){
                if(map.get(c) != null){
                    map.put(c, map.get(c)+1);
                }else{
                    map.put(c, 1);
                }
            }
        }else{
            for(Character c : cs){
                boolean isUpperCase = Character.isUpperCase(c);
                Character anotherChar = null;
                if(isUpperCase){
                    anotherChar = Character.toLowerCase(c);
                }else{
                    anotherChar = Character.toUpperCase(c);
                }
                if(map.get(c) != null){
                    map.put(c, map.get(c)+1);
                }else if(map.get(anotherChar) != null){//当前字符是大写字母,小写字母存在
                    map.put(anotherChar, map.get(anotherChar)+1);
                }else{
                    map.put(c, 1);
                }
            }
        }
        
        // 寻找最大个数
        int maxValue = 0;
        for(int value : map.values()){
            maxValue = maxValue > value ? maxValue : value;
        }
        
        //找到第一个符合最大个数的字符
        Character maxChar = null;
        for(Character c : map.keySet()){
            if(map.get(c) == maxValue){
                maxChar = c;
                break;
            }
        }
        
        //打印
        if(maxChar != null){
            System.out.println(maxChar + " " + maxValue);
        }
        
    }
}

 

posted @ 2018-09-25 22:32  君子如珩~  阅读(721)  评论(0)    收藏  举报