Skip to content
在本页面

有效的字母异位词

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 10^4
  • st 仅包含小写字母

进阶: 如果输入字符串包含 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)
};

排序

给两个字符串排序后, 如果相等则是互为字母异位词

Released under the MIT License.