给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
1. 直接把字符串转换为数组,排序后拼接成字符串判断是否相等
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
// 必须要 join 以后才可能比较,因为数组是引用, === 一定返回 false
return s.split('').sort().join('') === t.split('').sort().join('');
};
2. 使用哈希表
var isAnagram = function(s, t) {
if(s === t) {
return true;
}
if(s.length !== t.length) {
return false;
}
let obj = {};
for(let i = 0; i < s.length; i++ ) {
if(!obj[s[i]]) {
obj[s[i]] = 0;
}
obj[s[i]] += 1;
if(!obj[t[i]]) {
obj[t[i]] = 0;
}
obj[t[i]] -= 1;
}
for(let x in obj) {
if(obj[x] !== 0) {
return false;
}
}
return true;
}