[LeetCode] Check Whether Two Strings are Almost Equivalent

아르당·2026년 8월 3일

LeetCode

목록 보기
442/561
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

2개의 문자열 word1과 word2는 'a'부터 'z'까지 각 문자의 빈도수 차이가 3이하일 때 거의 동일한다고 한다.
각 길이가 n인 2개의 문자열 word1과 word2가 주어졌을 때, word1과 word2가 거의 동일하다면 true, 그렇지 않다면 false를 반환해라.
문자 x의 빈도는 문자열에서 나타나는 횟수이다.

Example

#1
Input: word1 = "aaaa", word2 = "bccb"
Output: false
Explanation: "aaaa"에 'a'가 4개 있지만 "bccb"에 'a'는 0개이다.
차이는 4이고, 3보다 크다.

#2
Input: word1 = "abcdeef", word2 = "abaaacc"
Output: true
Explanation: word1과 word2에는 있는 각 문자의 빈도 차이는 최대 3이다.

  • a는 word1에서 1번, word2에서 4번 나타난다. 차이는 3이다.
  • b는 word1에서 1번, word2에서 1번 나타난다. 차이는 0이다.
  • c는 word1에서 1번, word2에서 2번 나타난다. 차이는 1이다.
  • d는 word1에서 1번, word2에서 0번 나타난다. 차이는 1이다.
  • e는 word1에서 2번, word2에서 0번 나타난다. 차이는 2이다.
  • f는 word1에서 1번, word2에서 0번 나타난다. 차이는 1이다.

#3
Input: word1 = "cccddabba", word2 = "babababab"
Output: true

Constraints

  • n == word1.length == word2.length
  • 1 <= n <= 100
  • word1과 word2는 오직 영어 소문자로 구성된다.

Solved

class Solution {
    public boolean checkAlmostEquivalent(String word1, String word2) {
        int n = word1.length();
        int[] counts = new int[26];

        for(int i = 0; i < n; i++){
            char c1 = word1.charAt(i);
            char c2 = word2.charAt(i);

            counts[c1 - 'a']++;
            counts[c2 - 'a']--;
        }

        for(int count : counts){
            if(count > 3 || count < -3){
                return false;
            }
        }

        return true;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글