有效的字母异位词
给定两个字符串
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 * 10^4
s
和t
仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
思路
首先判断两个字符串长度是否相等,不相等则直接返回 false
若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t
s 负责在对应位置增加,t 负责在对应位置减少
如果哈希表的值都为 0,则二者是字母异位词
对象计数
没看题解的第一次解法, 实际有更优代码, 请自行前往 leetCode 查看
TypeScript
function isAnagram(s: string, t: string): boolean {
if (s.length !== t.length) return false;
let obj = {};
s.split('').forEach(item => {
obj[item] === undefined ? obj[item] = 1 : obj[item]++;
})
for (let i = 0; i < t.length; i++) {
const item = t[i];
if (obj[item] === undefined) return false;
obj[item]--;
}
return Object.values(obj).every(e => e === 0)
};
排序
给两个字符串排序后, 如果相等则是互为字母异位词