题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例
知识点:哈希表
思路
因为这题实际是从一个集合(也就s中)和t中进行对比,看看内容是否完全一致,那么我们可以考虑利用哈希表。数组就是最简单的哈希表,这题我们利用数组来写,我们将s存进一个数组中,怎么存呢?
我们可以考虑构造一个数组recorde[26],为什么是26?因为26个字母嘛。我们可以把a存到record[0]里面,每当s中出现一个a就record[0]++;用数组来记录26个字母中每个字母出现的次数。
然后再每当t中出现一个字母时record对应-1,这样对比结束,如果完全一致的话应该record每一个数都是0,如果有一个数非0,那么就证明多了或少了一个或多个字母,返回false。
代码
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26]={0};
if(s.size()!=t.size())
return false;
for(int i=0;i<s.size();i++)
{
record[s[i]-'a']++;
}
for(int j=0;j<t.size();j++)
{
record[t[j]-'a']--;
}
for(int k=0;k<26;k++)
{
if(record[k]!=0)
return false;
}
return true;
}
};