LeetCode 242: Valid Anagram 풀이

📊 결과


💻 내 코드

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) return false;

        char[] arr1 = s.toCharArray();
        char[] arr2 = t.toCharArray();

        Arrays.sort(arr1);
        Arrays.sort(arr2);
        
        return Arrays.equals(arr1, arr2);
    }
}

📝 평가

✔ 잘한 점

✦ 개선점


✨ 최적화

방법 1: 빈도수 배열 (O(n))

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) return false;
        
        int[] count = new int[26];
        
        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'a']++;
            count[t.charAt(i) - 'a']--;
        }
        
        for (int c : count) {
            if (c != 0) return false;
        }
        
        return true;
    }
}

방법 2: HashMap

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) return false;
        
        Map<Character, Integer> map = new HashMap<>();
        
        for (char c : s.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        
        for (char c : t.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) - 1);
            if (map.get(c) < 0) return false;
        }
        
        return true;
    }
}

📊 성능 비교

방법 시간 공간 특징
정렬 O(n log n) O(n) 간결
배열 O(n) O(1) 최적 (소문자만)
HashMap O(n) O(n) 유니코드 대응

🎯 개선 후 코드

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) return false;
        
        int[] count = new int[26];
        
        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'a']++;
            count[t.charAt(i) - 'a']--;
        }
        
        for (int c : count) {
            if (c != 0) return false;
        }
        
        return true;
    }
}

개선: O(n log n) → O(n)


💡 핵심

Anagram = 같은 문자 빈도


🎓 다음 단계


🏷️ Keywords

#LeetCode #Anagram #HashMap #Sorting #String #Easy