Post

[Algorithm] LeetCode 242: Valid Anagram

[Algorithm] LeetCode 242: Valid Anagram

✏️ LeetCode 242: Valid Anagram

  • Level: Easy
  • Algorithm: Sorting / HashMap
  • Language: Python3


⚡ 1. Problem

두 문자열 s, t가 주어졌을 때,

서로 글자 구성(문자 → 개수)이 완전히 동일하면
두 문자열은 anagram

예:

  • "anagram""nagaram" → True
  • "rat""car" → False

📍 문자 순서는 상관 없음.
📍 “문자 종류 + 각 문자 개수”가 동일한지를 판단하는 문제.


⚡ 2. Approach

입력 제약:

1
1 <= s.length, t.length <= 5 * 10^4

📍 n = max(len(s), len(t))

  • 가능한 시간복잡도: O(n), O(nlogn)
  • 문자열 비교 문제의 전형적인 두 패턴:
    1) 정렬(Sort) → O(nlogn)
    2) 해시맵(dict / Counter) → O(n)

두 방식 모두 통과 가능하지만, 정렬 방식이 가장 직관적이며 코드가 짧다.


⚡ 3. Naive Approach (Sort)

Code (Sort)

1
2
3
4
5
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if sorted(s) == sorted(t):
            return True
        return False

Time Complexity

  • 정렬: O(nlogn)
  • 비교: O(n)

➡️ 총 O(nlogn)


⚡ 4. Best Practice: HashMap (Counter)

정렬 없이, 문자 개수를 세어서 비교하는 방식.
문자열 기반 문제에서 가장 효율적인 풀이.

Code (Counter)

1
2
3
4
5
6
from collections import Counter


class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return Counter(s) == Counter(t)

Time Complexity

  • Counting: O(n)
  • Dictionary 비교: O(n)

➡️ 총 O(n)


⚡ 5. Pitfalls

  • 문자 순서는 중요하지 않지만 문자 개수는 정확해야 한다.
  • 문자열 길이가 다르면 바로 False.


아래 문제들은 공통적으로
문자의 빈도(Counting) 또는 해시맵 비교 패턴 사용

📍 떠올릴 키워드:

Sorting / Counting / HashMap / Character Frequency


⚡ 8. Conclusion

문자열 anagram 문제는 결국 문자 종류와 개수가 같은지 확인하는 문제이며,
대표적인 해결 방식은 2가지.

  • Sorting → O(nlogn)
  • Counter(빈도수 세기) → O(n)

Always remember:

  • 문자열 비교 = Sort 또는 Counter
  • 핵심은 문자 개수 동일 여부
This post is licensed under CC BY 4.0 by the author.