Given two strings and b consisting of lowercase characters. The task is to check whether two given strings are an 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.

Example 1:

Input:

a = codemummy, b = mummycode

Output: 1

Explanation: Both the string have same

characters with same frequency. So,

both are anagrams.

Example 2:

Input:

a = allergy, b = allergic

Output: 0

Explanation: Characters in both the strings

are not same, so they are not anagrams.

method 1 :

use sorting:

sort both the string now check if the sorted strings are equal if they are equal return 1, else return 0.

c++ implementation:

```bool isAnagram(string a, string b)
{

sort(a.begin(),a.end());
sort(b.begin(),b.end());

if(a==b)
return 1;
else
return 0;
}```

Time Complexity: O(nlogn)
space Complexity: O(n)

method 2 :

take one h[] array. increment the value in h[] array for characters in string a and decrement for characters in string b. Finally, if all count values are 0, then the two strings are anagram of each other.

c++ implementation:

```bool isAnagram(string a, string b){
int n=a.length();
int m=b.length();

if(n!=m)
return 0;

int h[26]={0};

for(int i=0;i<n;i++)
h[a[i]-'a']++;

for(int i=0;i<n;i++)
h[b[i]-'a']--;

for(int i=0;i<26;i++)
{
if(h[i]!=0)
return 0;
}

return 1;
}```

Time Complexity: O(n)
space Complexity: extra space for h[] array.

method 3 :

c++ implementation:

```bool isAnagram(string a, string d){
if (a.size() != d.size())
return false;
int count = 0;

// Take sum of all characters of first String
for (int i = 0; i < a.size(); i++) {
count += a[i];
}

// Subtract the Value of all the characters of second
// String
for (int i = 0; i < d.size(); i++) {
count -= d[i];
}

// If Count = 0 then they are anagram
// If count > 0 or count < 0 then they are not anagram
return (count == 0);
}```

Time Complexity: O(n)
space Complexity: O(1)

darkmode