给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
提示:
1 <= s.length, t.length <= 5 * 104s和t仅包含小写字母
基本思路:字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。因此非字母异位词的情况有两种:1.t串中出现s串中未出现的字母;2.有s串中出现的字母未在t串中出现。因此直接创建大小为26的辅助数组count来统计字母出现次数,先遍历一次s串统计每个字母在s串中的出现次数,字母出现一次就在统计数组中对应位置+1;再遍历一次t串,字母每出现一次就在统计数组对应位置-1。最后遍历统计数组,若出现count[i]<0说明出现情况1,出现count[i]>0说明出现情况2。两种情况返回false,否则是字母异位词,返回true。
代码如下:
bool isAnagram(string s, string t) {
int count[26]={0};//存储每个字母的出现次数
for(int i=0;i<s.size();i++){//遍历一边s串统计字符次数
count[s[i]-'a']++;
}
for(int i=0;i<t.size();i++){
count[t[i]-'a']--;
if(count[t[i]-'a']<0)return false;//若字符出现次数<0说明此时t串中出现不属于s串中的字母
}
for(int i=0;i<26;i++){//看看s串中的每个字母是否都在t串中出现过
if(count[i]!=0)return false;
}
return true;
}
244

被折叠的 条评论
为什么被折叠?



