[leetcode-242-Valid Anagram]
Given two strings s and t, write a function to determine if t is an anagram of s.
For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.
Note:
You may assume the string contains only lowercase alphabets.
思路:
anagram有一个特点就是排序之后,字符串是相等的。
bool isAnagram(string s, string t) { if(s.size()!=t.size())return false; map<string,int>m; sort(s.begin(),s.end()); sort(t.begin(),t.end()); m[s]++; m[t]++; if(m.size()==2)return false; return true; }
还可以用hash
bool isAnagram(string s, string t) { if (s.length() != t.length()) return false; int n = s.length(); unordered_map<char, int> counts; for (int i = 0; i < n; i++) { counts[s[i]]++; counts[t[i]]--; } for (auto count : counts) if (count.second) return false; return true; }
bool isAnagram(string s, string t) { if (s.length() != t.length()) return false; int n = s.length(); int counts[26] = {0}; for (int i = 0; i < n; i++) { counts[s[i] - 'a']++; counts[t[i] - 'a']--; } for (int i = 0; i < 26; i++) if (counts[i]) return false; return true; }
参考:
https://discuss.leetcode.com/topic/20303/2-c-solutions-with-explanations