インタビューの質問:文字列に最も頻繁に現れる文字を数えます

繰り返される文字がないと仮定して、文字列に最も頻繁に現れる文字を数えます

分析

HashMapの特性を把握します。
重複キーが検出された場合は、前の重複キーが返されます。重複していないキーが検出された
場合は、null

したがって、アイデアは非常に明確です!
2つのマップを準備します。1つは文字列を格納するために使用され、キーは文字列の各文字であり、値は1であり、
もう1つは繰り返し文字が表示されたときの繰り返し回数を格納するために使用され、キーは繰り返し文字であり、 valueは繰り返しの数です。

しかし、現時点で最大の値と対応するキーをどのように取得しますか?頭痛の種です!
最初に最大値を見つけることができます。次に、マップのentrySetを取得し、そこから値の比較を取り出します。最大の値が見つかった場合は、そのキーをもう一度取り出します。

コード

public static Character maxChar(String strs){
    
    
    char[] chars = strs.toCharArray();
    Map<Character,Integer> maps = new HashMap<>();

    Map<Character,Integer> duplicate = new HashMap<>();
    for (int i = 0; i < chars.length; i++) {
    
    
        duplicate.put(chars[i], 1);
    }

    for (int i = 0; i < chars.length; i++) {
    
    
        Integer put = maps.put(chars[i], 1);
        //说明chars[i]字符已经重复了,如何处理呢
        if(put != null){
    
    
            duplicate.put(chars[i],duplicate.get(chars[i])+1);
        }
    }

    int maxValue = 0;

    Set<Character> characters = duplicate.keySet();
    for (Character character : characters) {
    
    
        if(duplicate.get(character) > maxValue){
    
    
            maxValue = duplicate.get(character);
        }
    }

    Set<Map.Entry<Character, Integer>> entries = duplicate.entrySet();
    for (Map.Entry<Character, Integer> entry : entries) {
    
    
        if(entry.getValue().equals(maxValue)){
    
    
            return entry.getKey();
        }
    }
    return null;
}

おすすめ

転載: blog.csdn.net/JAYU_37/article/details/107267409