Python Program To Check Whether Two Strings Are Anagram Of Each Other
Last Updated :
17 May, 2023
Write a function to check whether two given strings are anagram of each other or not. An anagram of a string is another string that contains the same characters, only the order of characters can be different. For example, "abcd" and "dabc" are an anagram of each other.

Method 1 (Use Sorting):
- Sort both strings
- Compare the sorted strings
Below is the implementation of the above idea:
Python
# Python program to check whether two
# strings are anagrams of each other
# Function to check whether two strings
# are anagram of each other
def areAnagram(str1, str2):
# Get lengths of both strings
n1 = len(str1)
n2 = len(str2)
# If length of both strings is not
# same, then they cannot be anagram
if n1 != n2:
return 0
# Sort both strings
str1 = sorted(str1)
str2 = sorted(str2)
# Compare sorted strings
for i in range(0, n1):
if str1[i] != str2[i]:
return 0
return 1
# Driver code
str1 = "test"
str2 = "ttew"
# Function Call
if areAnagram(str1, str2):
print(
"The two strings are anagram of each other")
else:
print(
"The two strings are not anagram of each other")
# This code is contributed by Bhavya Jain
OutputThe two strings are not anagram of each other
Time Complexity: O(nLogn)
Auxiliary space: O(1).
Method 2 (Count characters):
This method assumes that the set of possible characters in both strings is small. In the following implementation, it is assumed that the characters are stored using 8 bit and there can be 256 possible characters.
- Create count arrays of size 256 for both strings. Initialize all values in count arrays as 0.
- Iterate through every character of both strings and increment the count of character in the corresponding count arrays.
- Compare count arrays. If both count arrays are same, then return true.
Below is the implementation of the above idea:
Python
# Python program to check if two strings
# are anagrams of each other
NO_OF_CHARS = 256
# Function to check whether two strings
# are anagram of each other
def areAnagram(str1, str2):
# Create two count arrays and initialize
# all values as 0
count1 = [0] * NO_OF_CHARS
count2 = [0] * NO_OF_CHARS
# For each character in input strings,
# increment count in the corresponding
# count array
for i in str1:
count1[ord(i)] += 1
for i in str2:
count2[ord(i)] += 1
# If both strings are of different length.
# Removing this condition will make the
# program fail for strings like "aaca"
# and "aca"
if len(str1) != len(str2):
return 0
# Compare count arrays
for i in xrange(NO_OF_CHARS):
if count1[i] != count2[i]:
return 0
return 1
# Driver code
str1 = "geeksforgeeks"
str2 = "forgeeksgeeks"
# Function call
if areAnagram(str1, str2):
print ("The two strings are anagram of each other")
else:
print ("The two strings are not anagram of each other")
# This code is contributed by Bhavya Jain
OutputThe two strings are anagram of each other
Time Complexity: O(n)
Auxiliary space: O(n).
Method 3 (count characters using one array):
The above implementation can be further to use only one count array instead of two. We can increment the value in count array for characters in str1 and decrement for characters in str2. Finally, if all count values are 0, then the two strings are anagram of each other. Thanks to Ace for suggesting this optimization.
Python3
# Python program to check if two strings
# are anagrams of each other
NO_OF_CHARS = 256
# Function to check if two strings
# are anagrams of each other
def areAnagram(str1,str2):
# Create a count array and initialize
# all values as 0
count=[0 for i in range(NO_OF_CHARS)]
i=0
# For each character in input strings,
# increment count in the corresponding
# count array
for i in range(len(str1)):
count[ord(str1[i]) - ord('a')] += 1;
count[ord(str2[i]) - ord('a')] -= 1;
# If both strings are of different
# length. Removing this condition
# will make the program fail for
# strings like "aaca" and "aca"
if(len(str1) != len(str2)):
return False;
# See if there is any non-zero
# value in count array
for i in range(NO_OF_CHARS):
if (count[i] != 0):
return False
return True
# Driver code
str1="geeksforgeeks"
str2="forgeeksgeeks"
# Function call
if (areAnagram(str1, str2)):
print(
"The two strings are anagram of each other")
else:
print(
"The two strings are not anagram of each other")
# This code is contributed by patel2127
OutputThe two strings are anagram of each other
Time Complexity: O(n)
Auxiliary space: O(n).
Method 4 (Using Counter() function):
- Count all the frequencies of the 1st string and 2nd string using the counter() function.
- If they are equal then both the strings are anagrams.
Python3
# Python3 program for the above approach
from collections import Counter
# Function to check if two strings are
# anagram or not
def check(s1, s2):
# implementing counter function
if(Counter(s1) == Counter(s2)):
print("The two strings are anagram of each other")
else:
print("The two strings are not anagram of each other")
# driver code
s1 = "geeksforgeeks"
s2 = "forgeeksgeeks"
check(s1, s2)
# This code is contributed by Pushpesh Raj
OutputThe two strings are anagram of each other
Time Complexity: O(n)
Auxiliary space: O(1), because it is using constant space
Approach#5: Using dictionary
This approach uses a dictionary to store the frequency of each character in the first string. Then it traverses the second string and decrements the frequency of each character in the dictionary. Finally, it checks if all the values in the dictionary are zero, which indicates that both strings have the same characters with the same frequency. If any value in the dictionary is not zero, then the strings are not anagrams of each other.
Algorithm
1. Initialize an empty dictionary.
2. Traverse the first string and add each character to the dictionary with its frequency.
3. Traverse the second string and decrement the frequency of each character in the dictionary.
4. If all the values in the dictionary are zero, the strings are anagrams, otherwise they are not.
Python3
def are_anagrams_dict(str1, str2):
# Initialize an empty dictionary
dict = {}
# Traverse the first string and add each character to the dictionary with its frequency
for char in str1:
if char in dict:
dict[char] += 1
else:
dict[char] = 1
# Traverse the second string and decrement the frequency of each character in the dictionary
for char in str2:
if char in dict:
dict[char] -= 1
else:
return 'the two strings are not anagrams of each other'
# Check if all the values in the dictionary are zero
for value in dict.values():
if value != 0:
return 'the two strings are not anagrams of each other'
return 'the two strings are anagrams of each other'
str1 = "geeksforgeeks"
str2 = "forgeeksgeeks"
print(are_anagrams_dict(str1, str2))
Outputthe two strings are anagrams of each other
Time Complexity: O(n) where n is the length of the strings.
Auxiliary Space: O(n) where n is the length of the strings.
Please suggest if someone has a better solution which is more efficient in terms of space and time.
Please refer complete article on Check whether two strings are anagram of each other for more details!
Approach#6: Using defaultdict+lambda
This approach is to create a lambda function that takes two strings and checks if each character in both strings appears the same number of times using the count() function. The lambda function returns True if all characters appear the same number of times and False otherwise. The set() function is used to create a set of all characters in both strings to avoid checking the same character multiple times.
Algorithm
1. Import defaultdict module from collections
2. Initialize two strings str1 and str2
3. Create a lambda function called "is_anagram" that takes two string arguments s1 and s2
4. In the lambda function, use the all() function to check if each character in both strings appears the same number of times using the count() function
5. The lambda function returns True if all characters appear the same number of times and False otherwise
6. Create two strings str1 and str2 to test the lambda function
7. Call the lambda function with str1 and str2 as arguments and print the result
Python3
from collections import defaultdict
str1 = "geeksforgeeks"
str2 = "forgeeksgeeks"
is_anagram = lambda s1, s2: all(s1.count(c) == s2.count(c) for c in set(s1 + s2))
if is_anagram(str1, str2):
print("The two strings are anagrams of each other")
else:
print("The two strings are not anagrams of each other")
OutputThe two strings are anagrams of each other
Time Complexity: O(n), where n is the length of the strings str1 and str2. This is because the lambda function iterates through each character in both strings and performs a constant time operation to check if each character appears the same number of times.
Auxiliary Space: O(n), where n is the length of the strings str1 and str2. This is because the lambda function creates a set of all characters in both strings, which can have a maximum size of 2n. Additionally, the lambda function creates two variables, s1 and s2, each of which can have a maximum size of n. Overall, the space complexity is dominated by the size of the input strings.
Similar Reads
Check if Two Strings are Anagram - Python The task of checking if two strings are anagrams in Python involves determining whether the two strings contain the same characters with the same frequency, but possibly in a different order. For example, given the strings "listen" and "silent", they are anagrams because both contain the same charac
2 min read
Python program to check whether the string is Symmetrical or Palindrome The task of checking whether a string is symmetrical or palindrome in Python involves two main operations . A string is symmetrical if its first half matches the second half, considering the middle character for odd-length strings. A string is palindrome if it reads the same forward and backward.For
4 min read
Python Program to check for almost similar Strings Given two strings, the task here is to write a python program that can test if they are almost similar. Similarity of strings is being checked on the criteria of frequency difference of each character which should be greater than a threshold here represented by K. Input : test_str1 = 'aabcdaa', test
5 min read
Python program to check if given string is pangram The task is to check if a string is a pangram which means it includes every letter of the English alphabet at least once. In this article, weâll look at different ways to check if the string contains all 26 letters.Using Bitmasking Bitmasking uses a number where each bit represents a letter in the a
2 min read
Python Program that Displays Letters that are not common in two strings Given two strings. write a Python program to find which letters are in the two strings but not in both. Example: Input: india australia Output: s t r n d u l Steps to be performed: Take two string inputs and store them in different variables.Convert them into a set and look for letters inside in two
3 min read
Python Program to test if the String only Numbers and Alphabets Given a String, our task is to write a Python program to check if string contains both numbers and alphabets, not either nor punctuations. Examples: Input : test_str = 'Geeks4Geeks' Output : True Explanation : Contains both number and alphabets. Input : test_str = 'GeeksforGeeks' Output : False Expl
4 min read
Python - Check if two strings are Rotationally Equivalent Sometimes, while working with Python Strings, we can have problem in which we need to check if one string can be derived from other upon left or right rotation. This kind of problem can have application in many domains such as web development and competitive programming. Let's discuss certain ways i
4 min read
Python | Ways to check string contain all same characters Given a list of strings, write a Python program to check whether each string has all the characters same or not. Given below are a few methods to check the same. Method #1: Using Naive Method [Inefficient] Python3 # Python code to demonstrate # to check whether string contains # all characters same
5 min read
Python | Check whether two lists follow same pattern or not Given two lists A and B, check if they follow the same pattern or not. Condition for pattern matching: Ai > Aj, then Bi > Bj Ai = Aj, then Bi = Bj Ai < Aj, then Bi < Bj, for all i, j. Example: Input: 2 17 100 10 20 50 Output: YES Input: 5 7 10 33 10 50 10 45 Output: NO Approach: To check
2 min read
Python3 Program to Check if a string can be obtained by rotating another string 2 places Given two strings, the task is to find if a string can be obtained by rotating another string two places. Examples: Input: string1 = "amazon", string2 = "azonam" Output: Yes // rotated anti-clockwiseInput: string1 = "amazon", string2 = "onamaz" Output: Yes // rotated clockwiseAsked in: Amazon Interv
2 min read