给定两个字符串 s 和 t,判断 s 是否是 t 的字母异位词,若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
排序
- 时间复杂度O(nlogn),排序复杂度O(nlogn),比较复杂度O(n)
- 空间复杂度O(n),空间复杂度取决于排序算法,对字符串转化需要额外空间。
- Runtime: 112 ms, faster than 39.45%
- Memory Usage: 45.4 MB, less than 5.59%
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if (s.length !== t.length) {
return false
}
const s1 = s.split('');
const t1 = t.split('');
s1.sort();
t1.sort();
return s1.toString() === t1.toString();
};
哈希表
- 时间复杂度O(N),空间复杂度O(1)
- Runtime: 80 ms, faster than 96.30%
- Memory Usage: 39.8 MB, less than 93.73%
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if (s.length !== t.length) {
return false;
}
let counter = new Array(26).fill(0);
for (let i = 0; i < s.length; i++) {
counter[s.charCodeAt(i) - 97]++;
counter[t.charCodeAt(i) - 97]--;
}
for (let j of counter) {
if (j !== 0) {
return false;
}
}
return true;
};
网友评论