더북(TheBook)

HashMap을 사용하는 방식이 너무 복잡하고 느려 보인다면 (살짝 더 빠른) 아스키 코드를 이용하는 방법도 있다. 이 해법은 인덱스가 총 256개인 빈 배열로 시작한다(256은 확장 아스키표 코드의 최댓값이다. 자세한 내용은 002. 반복되지 않는 첫 번째 문자 찾기 절을 참고한다). 이어서 주어진 문자열의 각 문자를 순회하며 배열 내 해당 문자의 인덱스를 증가시킴으로써 빈도수를 기록한다.

private static final int EXTENDED_ASCII_CODES = 256;
...
public static Pair<Character, Integer> maxOccurenceCharacter(String str) {
  int maxOccurrences = -1;
  char maxCharacter = Character.MIN_VALUE;
  char[] chStr = str.toCharArray();
  int[] asciiCodes = new int[EXTENDED_ASCII_CODES];

  for (int i = 0; i < chStr.length; i++) {
    char currentCh = chStr[i];
    if (!Character.isWhitespace(currentCh)) { // 여백은 제외
      int code = (int) currentCh;
      asciiCodes[code]++;
      if (asciiCodes[code] > maxOccurrences) {
        maxOccurrences = asciiCodes[code];
        maxCharacter = currentCh;
      }
    } 
  }

  return Pair.of(maxCharacter, maxOccurrences);
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.