最も頻繁に出力され、最初に表示される文字

14561 ワード

タイトル


1つの文字列があると仮定し、文字列内部のすべての文字がascii符号化の範囲内であり、符号化は文字列の中で最も頻度の高い文字を求め、最も頻度の高い文字がいくつかの文字が現れる頻度が同じであれば、最初に現れる文字を出力する.
入力列が「hello world,every body!」の場合、最も頻度が高く、最初に現れる文字を出力します.
メソッド定義:char getMaxOccurChar(String str)
入力
hello world, every body!

しゅつりょく
e

コード#コード#


方法1:LinkedHashMapでシミュレーションして、最後に最も値を求める
public class Main {

    public static void main(String[] args) {
        char result = getMaxOccurChar("hello world, every body!");
        System.out.println(result);
        result = getMaxOccurChar("aaaahfdfbbbbbbbbbb");
        System.out.println(result);
    }

    public static char getMaxOccurChar(String str) {
        
        int maxCount = 1;
        Character result = new Character(str.charAt(0));
        
        Map<Character, Integer> map = new LinkedHashMap<>();
        for (int i = 0; i < str.length(); i++) {
            Character content = str.charAt(i);
            Integer count = map.get(content);
            if (count == null) {
                map.put(content, 1);
            } else {
                map.put(content, count + 1);
            }
        }
        
        for (Map.Entry<Character, Integer> entry: map.entrySet()) {
            if (entry.getValue() > maxCount) {
                result = entry.getKey();
                maxCount = entry.getValue();
            }
        }
        return result;
    }
}

面接官:一度で済む可能性はありますか.私:いいですよ.面接官:逆さまにしてもいいですか.私:ああ、そうです.
public class Main {

    public static void main(String[] args) {
        char result = getMaxOccurChar("hello world, every body!");
        System.out.println(result);
        result = getMaxOccurChar("aaaahfdfbbbbbbbbbb");
        System.out.println(result);
    }

    public static char getMaxOccurChar(String str) {

        int maxCount = 1;
        Character result = new Character(str.charAt(0));
        Map<Character, Integer> map = new LinkedHashMap<>();

        for (int i = str.length() - 1; i >= 0 ; i--) {
            Character content = str.charAt(i);
            Integer count = map.get(content);
            if (count == null) {
                map.put(content, 1);
                count = 1;
            } else {
                map.put(content, count + 1);
                count += 1;
            }
            if (count >= maxCount) {
                maxCount = count;
                result = str.charAt(i);
            }
        }
        return result;
    }
}