- 链接: https://leetcode.cn/problems/dKk3P7/
- 题目: 给出两个字符串 s 和 t ,编写个函数来判断它们是否是一组变位词(字母异位词)。 注意:若 s 和 t 每个字符出现的次数相同,字符顺序不完全相同,称为 s 和 t 相互变位词(字母异位词)。 示例:
输入: s = “anagram”, t = “nagaram” 输出: true
- 思路:
- 第一,排序。字符串。 s 和 t 如果长度不相等或完全相等,则不是变位词。变位词相当于两个字符串不相等,但排序后相等。所以是的 s 和 t 先排序,如果排序后两个字符串相等,则返回真实,否则返回假。
- 第二,哈希 s 遍历,用map将字母的出现次数记录下来,再对 t 进行遍历,减去出现字母的次数,如果出现负数,则返回假。在遍历结束后,如果没有返回,则返回真实。
- 代码:
class Solution {
public: bool isAnagram(string s, string t) {
//两种方法公有部分 if(s==t||s.size()!=t.size()) return false; //第一,排序 sort(s.begin(),s.end()); sort(t.begin(),t.end()); return s==t; //第二种,哈希 map<char,int> ans; for(int i=0;i<s.size();i ) ans[s[i]] ; for(int i=0;i<t.size();i++){
ans[t[i]]--;
if(ans[t[i]]<0)
return false;
};
return true;
}
};