(String, Easy) Valid Anagram

송재호·2025년 8월 8일
0

https://leetcode.com/problems/valid-anagram/description/

아스키로 가정하면 그냥 배열에서 증감처리하고 숫자 전부 일치하는지 보면 될 것 같은데
(참고로 아래 코드도 더 리팩터링 가능, 정상적인 anagram이면 둘이 length 같아야 하므로 굳이 두 번 돌 필요 없음. 길이 체크로 가지치고, 한 번만 돌면서 증감처리 가능)

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] arr = new int[26];

        for (char c : s.toCharArray()) {
            arr[c - 'a']++;
        }
        for (char c : t.toCharArray()) {
            arr[c - 'a']--;
        }

        for (int a : arr) {
            if (a != 0) {
                return false;
            }
        }
        return true;
    }
}

문제 Follow up에서 유니코드 케이스도 생각해보란다.
그러면 해시 컬렉션 써야지.

class Solution {
    public boolean isAnagram(String s, String t) {
        Map<Character, Integer> map = new HashMap<>();

        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        for (char c : t.toCharArray()) {
            if (!map.containsKey(c)) {
                return false;
            }

            map.put(c, map.get(c) - 1);
            if (map.get(c) == 0) {
                map.remove(c);
            }
        }

        return map.isEmpty();
    }
}
profile
식지 않는 감자

0개의 댓글