![]() |
VOOZH | about |
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.
👁 check-whether-two-strings-are-anagram-of-each-other
Method 1 (Use Sorting):
Below is the implementation of the above idea:
The 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.
Below is the implementation of the above idea:
The 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.
The two strings are anagram of each other
Time Complexity: O(n)
Auxiliary space: O(n).
Method 4 (Using Counter() function):
The two strings are anagram of each other
Time Complexity: O(n)
Auxiliary space: O(1), because it is using constant space
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.
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.
the 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!
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.
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
The 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.