242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
提示:
1 <= s.length, t.length <= 5 * 104 s 和 t 仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
解法
1、哈希表(自己的解法,很 low, 但是能用)
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function (s, t) {
if (s.length !== t.length) {
return false;
}
const sMap = {};
const tMap = {};
for (let i = 0; i < s.length; i++) {
if (sMap[s[i]]) {
sMap[s[i]]++;
} else {
sMap[s[i]] = 1;
}
}
for (let j = 0; j < t.length; j++) {
if (tMap[t[j]]) {
tMap[t[j]]++;
} else {
tMap[t[j]] = 1;
}
}
return !Object.keys(sMap).find((item) => tMap[item] !== sMap[item]);
};
哈希表另一种解法
var isAnagram = function (s, t) {
if (s.length !== t.length) {
return false;
}
const table = new Array(26).fill(0);
for (let i = 0; i < s.length; ++i) {
table[s.codePointAt(i) - "a".codePointAt(0)]++;
}
console.log(table);
for (let i = 0; i < t.length; ++i) {
table[t.codePointAt(i) - "a".codePointAt(0)]--;
if (table[t.codePointAt(i) - "a".codePointAt(0)] < 0) {
return false;
}
}
return true;
};
2、排序
有点投机取巧
思考:想不到字符串还可以这样排序!!!
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function (s, t) {
return (
s.length === t.length && [...s].sort().join("") === [...t].sort().join("")
);
};