Given two strings s
and t
, return true
if t
is an anagram of s
, and false
otherwise.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
1 <= s.length, t.length <= 5 * 10^4
s
and t
consist of lowercase English letters.class Solution:
def isAnagram(self, s: str, t: str) -> bool:
알파벳 소문자로만 이루어진 문자열 s
와 t
가 있고, 둘 사이가 애너그램 관계인지(사용된 문자가 전부 같은지) 여부를 bool
값으로 반환하는 문제입니다.
제가 생각한 코드는 다음과 같습니다.
from collections import defaultdict
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
d = defaultdict(int)
for c in s:
d[c] += 1
for c in t:
d[c] -= 1
for val in d.values():
if val != 0:
return False
return True
문자 : 등장횟수
를 키값으로 가지는 딕셔너리 d를 정의합니다.s
에서 등장한 문자만큼 값을 더하고 t
에서 등장한 문자만큼 값을 뺍니다.d
의 모든 값이 0이라면 두 문자열에서 사용된 문자가 완전히 같으므로 True
를 반환하고 중간에 0
이 아닌 값이 나온다면 False
를 반환합니다.복잡하게 생각할 것 없이 문자와 그 갯수를 저장하면 되는 문제입니다.
두 문자열의 길이가 다를 때를 고려하여 예외 상황으로 두지 않고 for문
을 각각 돌리는 방식으로 작성했습니다.
크게 어려운 점은 없는 문제였습니다.