[Hash Map / Set, Medium] Determine if Two Strings Are Close

송재호·2025년 3월 13일
0

https://leetcode.com/problems/determine-if-two-strings-are-close/description/?envType=study-plan-v2&envId=leetcode-75

문제풀이의 핵심은 각 두 연산에 집착하지 말고, 논리적으로 보는 것
스왑을 무제한으로 할 수 있기 때문에 사실상 글자의 빈도수가 일치하는지만 보면 된다.

  1. 글자 자체의 수가 같은지 확인 - Map또는 알파벳 담을 수 있는 배열 만들어서 갯수 누적
  2. 빈도수가 같은지 확인 - 두 Map.values()또는 배열을 정렬시켰을 때 모든 항목이 일치하는지 확인

둘 다 만족하는 경우 스왑을 통해 만들어질 수 있다는 의미가 된다.

class Solution {
    public boolean closeStrings(String word1, String word2) {
        int[] frequancyArr1 = new int[26];
        int[] frequancyArr2 = new int[26];

        for (char ch : word1.toCharArray()) {
            frequancyArr1[ch - 'a']++;
        }
        for (char ch : word2.toCharArray()) {
            frequancyArr2[ch - 'a']++;
        }

        for (int i=0; i<26; i++) {
            if ((frequancyArr1[i] == 0 && frequancyArr2[i] != 0) || (frequancyArr1[i] != 0 && frequancyArr2[i] == 0)) {
                return false;
            }
        }

        Arrays.sort(frequancyArr1);
        Arrays.sort(frequancyArr2);

       for (int i=0; i<26; i++) {
            if (frequancyArr1[i] != frequancyArr2[i]) {
                return false;
            }
        }

        return true;
    }
}
profile
식지 않는 감자

0개의 댓글