题目:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例1:
输入: s = "anagram", t = "nagaram"
输出: true
示例2:
输入: s = "rat", t = "car"
输出: false
提示:
· 1 <= s.length, t.length <= 5 * 104
· s 和 t 仅包含小写字母
解法一:先排序再比较
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if (s.length != t.length) { return false; }
return s.split('').sort().join('') == t.split('').sort().join('');
};
解法二:哈希表
1. 判断字符串 s 和 t 的长度是否相等;
2. 把字符串 s 中的元素及其出现次数存入 map;
3. 遍历字符串 t ,不断更新 map 中的值。一旦发现该值为 0 或 undefined ,直接返回 false。
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if (s.length != t. length) return false;
const map = new Map();
const len = s.length
for (let i = 0; i < len; i++) {
const val = map.get(s[i]);
map.set(s[i], val ? val + 1 : 1);
}
for (let i = 0; i < len; i++) {
const val = map.get(t[i]);
if (val) {
map.set(t[i], val - 1);
} else {
return false;
}
}
return true
};