题目链接:
分析:这个题和我之前写过的389.找不同的思路完全一样,都是采用hash,也就是空间换时间的方法。做完这个的同学可以再尝试一下另外的一道题目。我写的解析也贴在下面了。
算法思路:题目要求判断出现的两个字符串的组成是否相同,那么首先可以先判断两个字符串是否等长,如果不等长那么一定是false(这种属于边界条件,一定要加以考虑)。然后开一个vector,记录26个小写字母的出现次数,遍历两个字符串,一个负责小写字母计数的加,一个负责小写字母计数的减。遍历结束后,如果计数器的每一项都为0,那么说明两个字符串的组成完全相同,返回true,否则返回false。
下面是参考代码:
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size()!=t.size()) //判断两个字符串是否等长
return false;
vector<int>v(26,0); //开一个存储字母出现个数的计数器
for(int i=0;i<s.size();++i){//遍历两个字符串 开始进行处理
v[s[i]-'a']++;
v[t[i]-'a']--;
}
for(int i=0;i<26;++i){ //遍历结束后开始检查计数器
if(v[i]!=0)
return false;
}
return true;
}
};