Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions valid-anagram/okyungjin.py

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Hash Map / Hash Set, Two Pointers
  • 설명: 두 문자열의 문자 빈도를 비교하는 방식으로 해시 맵(Counter)을 활용하는 패턴과, 두 문자열의 길이가 같음을 빠르게 확인하고 한쪽에서 카운트를 차감해가는 흐름이 Two Pointers 계열에 해당합니다. 전체적으로 해시맵 기반의 빈도 비교 패턴입니다.

📊 시간/공간 복잡도 분석

복잡도
Time O(n)
Space O(k)

피드백: Counter를 사용해 s의 문자 빈도를 저장하고 t를 순회하며 차감한다. 문자열 길이가 다르면 빠르게 거르며, 각 문자에 대해 상수 시간 연산을 수행한다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# https://leetcode.com/problems/house-robber/description/

# [요구사항]
# 문자열 두 개가 주어졌을 때 애너그램이 맞는지 아닌지를 반환하는 문제
# 애너그램이란? 하나의 단어나 구에 들어 있는 글자들을 모두, 각각 정확히 한 번씩만 사용해서 순서를 바꾸어 만든 다른 단어나 구를 의미한다.
# 두 문자열이 애너그램이면 True, 아니면 False 반환

# [접근법]
# 1. 길이가 다르면 애너그램이 아니므로 바로 False를 반환한다.
# 2. s의 문자 개수를 센 뒤, t를 순회하며 하나씩 차감한다.
# 3. 없는 문자이거나 개수가 부족한 문자를 만나면 False를 반환한다.
# 4. 모든 문자를 정상적으로 처리하면 True를 반환한다.

# Time: O(N)
# Space: O(N)

from collections import Counter

class Solution:
def isAnagram(self, s: str, t: str) -> bool:
if len(s) != len(t):
return False

counter = Counter(s)

for char in t:
if counter[char] >= 1:
counter[char] -= 1
else:
return False

return True
Loading