Problem Description
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.
Example 1:
- Input:
s = "anagram", t = "nagaram"
- Output:
true
Example 2:
- Input:
s = rat", t = "car"
- Output:
false
My Idea
Since anagrams contain the same letters, my initial idea was to just sort the two strings and compare them. This results in a time complexity of O(nlog(n))
due to the sorting, but ist a very short solution consisting of just one line. My next approach was creating a dict containing the frequency of all the chars of every string and comparing them. This results in a time complexity of O(n)
.
My solution
def isAnagram(s: str, t: str) -> bool:
ds=dict()
for i in s:
if i in ds:
ds[i]+=1
else:
ds[i]=1
dt=dict()
for j in t:
if j in dt:
dt[j]+=1
else:
dt[j]=1
return ds==dt
# One-liner with O(nlogn) time complexity and O(n) space complexity
def isAnagramShort(s: str, t: str) -> bool:
return sorted(s) == sorted(t)