'How can I get my desired output for this code? Time Limit Exceeded
code-->
class Solution:
def isAnagram(self, s1: str,t1: str) -> bool:
flag=1
s = list(s1)
t = list(t1)
for i in range(len(s)):
for j in range(len(s)):
if s[i]==t[j]:
s[i]=t[j]='0'
break
for i in range(len(s)):
if s[i] !='0' :
flag=0
break
if flag:
print(True)
else:
print(False)
Constraints:
1 <= s.length, t.length <= 5 * 104
Please someone help to fix this code.
Solution 1:[1]
You could utilize the fact that two anagrams when sorted will be the same:
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
return sorted(s) == sorted(t)
Or that they would have the same counts of characters:
from collections import Counter
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
return Counter(s) == Counter(t)
The latter is more efficient since sorting is O(n log n)
, while constructing the Counter/Dictionary/Map/HashTable is linear time i.e., O(n)
.
If you don't want to use collections.Counter
since it feels like it's abstracting away the core part of the problem, you could replicate its functionality with a list (assumes both strings will only contain lowercase characters):
class Solution:
def lowercase_counts(self, s: str) -> list[int]:
counts = [0] * 26
for ch in s:
counts[ord(ch) - ord('a')] += 1
return counts
def isAnagram(self, s: str, t: str) -> bool:
return self.lowercase_counts(s) == self.lowercase_counts(t)
Or more robustly supporting all Unicode characters using a dictionary:
class Solution:
def character_counts(self, s: str) -> dict[str, int]:
counts = {}
for ch in s:
counts[ch] = counts.get(ch, 0) + 1
return counts
def isAnagram(self, s: str, t: str) -> bool:
return self.character_counts(s) == self.character_counts(t)
Solution 2:[2]
Simply use a Counter
.
from collections import Counter
def is_anagram(s1:str, s2:str) -> bool:
return Counter(s1) == Counter(s2)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Guimoute |