더북(TheBook)

006 문자 빈도수 세기

 

이 문제를 간단하게 푸는 방법은 다음 두 단계다.

1. 주어진 문자열에서 해당 문자를 전부 ""로 치환한다(사실상 주어진 문자열에서 해당 문자를 전부 제거하는 것이다).

2. 원래 문자열의 길이에서 첫 번째 단계에서 얻은 문자열의 길이를 뺀다.

코드로 구현하면 다음과 같다.

public static int countOccurrencesOfACertainCharacter(
    String str, char ch) {
  return str.length() - str.replace(String.valueOf(ch), "").length();
}

아래 해법은 유니코드 대리 쌍까지 처리한다.

public static int countOccurrencesOfACertainCharacter(
    String str, String ch) {
  if (ch.codePointCount(0, ch.length()) > 1) {
    // 주어진 문자열에 유니코드 문자가 둘 이상이면
    return -1;
  }

  int result = str.length() - str.replace(ch, "").length();

  // ch.length()가 2를 반환하면 유니코드 대리 쌍이라는 뜻이다
  return ch.length() == 2 ? result / 2 : result;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.