哈希
解题思路
记录 s 的每一个字符,放入 hash 中,次数 +1;
如果 t 的字符在 hash 中出现,次数 -1;
最后遍历 hash 表,若 hash 表记录的值都为 0 则说明 s 是 t 的有效的字母异位词;
复杂度
-
时间复杂度:
O(n)
,其中 n 为 s 的长度; -
空间复杂度:
O1)
;
代码实现
var isAnagram = function (s, t) {
if (s.length !== t.length) return false;
let hash = new Array(26).fill(0);
// 1. 将 s 的字符全部放入 hash 表中
for (let i = 0; i < s.length; i++) {
let offset = s.charCodeAt(i) - 97;
hash[offset]++;
}
// 2. 将 t 的字符全部从 hash 中取出
for (let i = 0; i < t.length; i++) {
let offset = t.charCodeAt(i) - 97;
hash[offset]--;
}
// 3. 如果 hash 表中全部是空的,则 s 是 t 的异位词
for (let i = 0; i < hash.length; i++) {
if (hash[i] !== 0) {
return false;
}
}
return true;
};
参考资料
leetcode🧑💻 383. 赎金信
上一篇