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.
算法一,排序
变位词是通过改变字母顺序而组成一个新词。
变化词内部字母进行排序后,应该是相等的。
class Solution {
public:
bool isAnagram(string s, string t) {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
return s == t;
}
};
算法二,统计字母出现的个数
统计每个字母出现的次数。
时间复杂度O(n),要快于算法一。
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.size() != t.size())
return false;
vector<int> count(26);
for (int i=0; i<s.size(); i++) {
++count[s[i]-'a'];
--count[t[i]-'a'];
}
for (auto c: count) {
if (c)
return false;
}
return true;
}
};