题目
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.
由于存在ASCII码互补的情况,比如“ac”和“bb”,无法通过算总体的值来比较,因此想到两种方法,一种先用sort函数对字符串排序,然后顺次比较;一种新建一个26个元素的vector,遍历s对vector对应位置的元素进行加法操作,然后遍历t对vector对应位置的元素进行减法操作,最后遍历vector,出现不为零的即表示二者不等。
方法一:
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size()!=t.size())
return false;
sort(s.begin(),s.end());
sort(t.begin(),t.end());
if(s==t)
return true;
else
return false;
}
};
方法二:
class Solution {
public:
bool isAnagram(string s, string t) {
vector<int> count(26, 0);
for (int i = 0; i < s.size(); i++)
count[s[i] - 'a'] ++;
for (int i = 0; i < t.size(); i++)
count[t[i] - 'a'] --;
for (int i = 0; i < 26; i++)
{
if (count[i] != 0)
return false;
}
return true;
}
};