Skip to content

Commit

Permalink
Improve checking anagrams in O(n) with dictionary (TheAlgorithms#4806)
Browse files Browse the repository at this point in the history
  • Loading branch information
mazaheriaan authored Oct 31, 2021
1 parent 13fdf21 commit 9ac94c0
Showing 1 changed file with 25 additions and 4 deletions.
29 changes: 25 additions & 4 deletions strings/check_anagrams.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
wiki: https://en.wikipedia.org/wiki/Anagram
"""
from collections import defaultdict


def check_anagrams(first_str: str, second_str: str) -> bool:
Expand All @@ -16,10 +17,30 @@ def check_anagrams(first_str: str, second_str: str) -> bool:
>>> check_anagrams('There', 'Their')
False
"""
return (
"".join(sorted(first_str.lower())).strip()
== "".join(sorted(second_str.lower())).strip()
)
first_str = first_str.lower().strip()
second_str = second_str.lower().strip()

# Remove whitespace
first_str = first_str.replace(" ", "")
second_str = second_str.replace(" ", "")

# Strings of different lengths are not anagrams
if len(first_str) != len(second_str):
return False

# Default values for count should be 0
count = defaultdict(int)

# For each character in input strings,
# increment count in the corresponding
for i in range(len(first_str)):
count[first_str[i]] += 1
count[second_str[i]] -= 1

for _count in count.values():
if _count != 0:
return False
return True


if __name__ == "__main__":
Expand Down

0 comments on commit 9ac94c0

Please sign in to comment.