一、思路
若
s
和t
中每个字符出现的次数都相同,因此需要统计两个字符串中每个字母出现的次数
二、方法
①可以使用哈希数组统计字母出现次数,因为小写字母有26个,所以Hash数组大小为26。
②对于字符串s依次遍历,并将字母映射在Hash上,同时该元素++,对于字符串t依次遍历,并将字母映射到Hash上,同时该元素--;
③最后遍历一次Hash数组,若出现元素值不为零的情况,则两个字符串中每个字符出现次数不一致,返回false。
三、代码
class Solution {
public:
bool isAnagram(string s, string t) {
int Hash[26];
memset(Hash,0,sizeof(Hash));
for(int i=0;i<s.size();i++)
Hash[s[i]-'a']++;
for(int i=0;i<t.size();i++)
Hash[t[i]-'a']--;
for(int i=0;i<26;i++)
if(Hash[i]!=0)
return false;
return true;
}
};
四、算法分析
①时间复杂度:有三个for循环,O(n)
②空间复杂度:定义了一个26大小的数组,O(1)
五、总结
①关键值key即数组的下标和我们需要统计的元素之间有一个映射关系即Hash[s[i]-'a'],s[i]-'a'的范围是0-25.
②字符串长度使用size()或strlen()
③长度一定且不大,优先考虑用数组实现