题目描述:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
注意事项:
1 <= s.length
,
t.length <= 5 * 104
s
和t
仅包含小写字母
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:输入: s = "rat", t = "car"
输出: false
分析:采用哈希表解题,创建一个哈希表,在s字符串字母出现时,对应位置+1;t字符串字母出现时,对应位置-1,最后遍历哈希表是否均为0。
代码如下:
bool isAnagram(char * s, char * t){
int hash[26]={0};
int len1 = strlen(s);
int len2 = strlen(t);
if(len1!=len2)
return false;
else
{
for(int i=0;i<len1;i++)
hash[s[i]-'a']++;
for(int i=0;i<len2;i++)
hash[t[i]-'a']--;
for(int i=0;i<26;i++)
{
if(hash[i]!=0)
return false;
}
}
return true;
}
bool isAnagram(char * s, char * t){
int hash[26]={0}; //创建哈希表
int len1 = strlen(s);
int len2 = strlen(t);
if(len1!=len2) //首先判断长度是否相同
return false;
else
{
for(int i=0;i<len1;i++)
hash[s[i]-'a']++;
for(int i=0;i<len2;i++)
hash[t[i]-'a']--;
for(int i=0;i<26;i++) //注意是遍历哈希表,并非两个字符串的长度
{
if(hash[i]!=0)
return false;
}
}
return true;
}
结果: