Write a method to decide if two strings are anagrams or not.
There are two ways to solve this problem.
<pre name="code" class="cpp">// use the sort algorithm in C++.
// Time complexity (nLgn), space o(1);
bool isAnagrams(string a, string b) {
// if the length of string a and b is not equal. There is no chance for them to be anagram.
if(a.size() != b.size()) return false;
sort(a.begin(), a.end()); sort(b.begin(), b.end());
if(strcmp(a, b) == 0) return true;
return false;
}
// another way is to use space O(n), time O(n)
bool isAnagrams(string a, string b) {
// check the length first.
if(a.size() != b.size()) return false;
vector<int> counts(256, 0); // use an array to remember the number of occurrences.
for(int i = 0; i < a.size(); ++i) {
counts[a[i]]++;
counts[b[i]]--;
}
for(int i = 0; i < 256; ++i) {
if(counts[i] < 0) return false; // any negative means the occurrences of a and b is different.
}
return true;
}