Given two strings A and B, check if they are anagrams.
Two strings are said to be anagrams, if one string can be obtained by rearranging the letters of another.
Examples of anagrams are
dog, god
abac, baac
123, 312
abab, aaba
and dab, baad
are not anagrams.
INPUT :
First line of the input is the number of test cases T. It is followed by T lines, each line has two space separated strings A and B;
OUTPUT
For each test case, print "YES" if they are anagrams, otherwise print "NO". (without quotes)
Constraints
- 1 <= T <= 10
- A and B both contain only lower case latin letters 'a' to 'z' and digits 0 to 9.
- Length of each string A and B does not exceed 5*10^5 (500000)
`
Sample Input Sample Output
------------------------------------
3 YES
abcd bcda NO
bad daa YES
a1b2c3 abc123 NO
How can we do this ?
bool anagramChecker(string first, string second)
{
if(first.Length != second.Length)
return false;
if(first == second)
return true;//or false: Don't know whether a string counts as an anagram of itself
Dictionary<char, int> pool = new Dictionary<char, int>();
foreach(char element in first.ToCharArray()) //fill the dictionary with that available chars and count them up
{
if(pool.ContainsKey(element))
pool[element]++;
else
pool.Add(element, 1);
}
foreach(char element in second.ToCharArray()) //take them out again
{
if(!pool.ContainsKey(element)) //if a char isn't there at all; we're out
return false;
if(--pool[element] == 0) //if a count is less than zero after decrement; we're out
pool.Remove(element);
}
return pool.Count == 0;
}