给定两个字符串 s 和 t,编写一个函数来判断 t 是否是 s 的字母异位词。
demo01
输入: s = "anagram", t = "nagaram"
输出: true
demo02
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
题解
关键词:map
- 首先判断两个字符串长度是否相等,不相等则直接返回 false
- 遍历
串 s
为 map 赋值,组成字母为 key,字母出现次数为 value - 遍历
串 t
,判断字母是否在 map 中,若在,map 值减 1,若不在,返回 false - 算法完成,返回 true
var isAnagram = function(s, t) {if (s.length !== t.length) {return false;}
let obj = {};
for (let i = 0; i < s.length; i ++) {let char = s.charAt(i);
obj[char] = obj[char] ? obj[char] + 1 : 1
}
for (let i = 0; i < t.length; i++) {let char = t.charAt(i);
if (!obj[char]) {return false;}
if (obj[char] > 0 ) {obj[char] --;
}
}
return true;
};
leetcode 优秀题解
guanpengchn 画解算法
关键词:哈希映射
- 首先判断两个字符串长度是否相等,不相等则直接返回 false
- 若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t,s 负责在对应位置增加,t 负责在对应位置减少
- 如果哈希表的值都为 0,则二者是字母异位词
var isAnagram = function(s, t) {if (s.length !== t.length) {return false;}
let alpha = new Array(26).fill(0);
let acharCode = 'a'.charCodeAt(0);
for(let i = 0; i < s.length; i++) {alpha[s.charCodeAt(i) - acharCode] ++;
alpha[t.charCodeAt(i) - acharCode] --;
}
console.log(alpha);
for(let i = 0; i < 26; i++) {if(alpha[i] != 0) {return false;}
}
return true;
};
conclusion
还是大佬写的好。
javascript 的字符串相减结果非数值,如'a' - 'a' = NAN
,因此程序需获取字符串的 charCode。
软实力提升
心理契约:任何时刻都存在于个体与组织之间的一系列没有明文规定的期望。(履行 -> 违背 -> 打破)