当前位置:   article > 正文

【数据结构与算法】力扣 242. 有效的字母异位词

【数据结构与算法】力扣 242. 有效的字母异位词

题目描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意: 若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s 和 t 仅包含小写字母

分析解答

比较字符串内字符的个数相同,很容易想到将各个字符作为一个key 存入一个对象中,个数相同就是这些键值是否相同。

此时会发现存在一个问题:那就是key 的顺序不同也会导致判断不同。所以判断是否相同时需要先将key进行排序。

这种类似于暴力解答,直接进行判断。

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function (s, t) {
    let sHash = {}
    let tHash = {}
    for (let i = 0; i < s.length; i++) {
        if (!sHash[s[i]]) {
            sHash[s[i]] = 1
            continue
        }
        sHash[s[i]]++
    }
    for (let i = 0; i < t.length; i++) {
        if (!tHash[t[i]]) {
            tHash[t[i]] = 1
            continue
        }
        tHash[t[i]]++
    }
    console.log(JSON.stringify(sHash))
    console.log(JSON.stringify(tHash))
    return isEqual(sHash, tHash)
};

function isEqual(obj1, obj2) {
    // 获取对象的键
    const keys1 = Object.keys(obj1).sort();
    const keys2 = Object.keys(obj2).sort();
    // 检查键的数量
    if (keys1.length !== keys2.length) {
        return false;
    }
    // 检查键的值是否相等
    for (let i = 0; i < keys1.length; i++) {
        const key = keys1[i];
        if (key !== keys2[i] || obj1[key] !== obj2[key]) {
            return false;
        }
    }
    return true;
}

console.log(isAnagram('ab', 'a'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

思路拓展

这里讲一下哈希法。

主要思路:就是在 arr 中放26个位置,值全为0。然后遍历 s,在 a-z 的对应位置加 1,然后遍历 t,在 a-z 的对应位置减 1,所以 s 和 t 相同的话,那么所有位置应该还是 0。

js 这里需要用 charCodeAt 获取 ascii 值。

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function (s, t) {
    if (s.length !== t.length) {
        return false
    }
    let arr = new Array(26).fill(0);
    const base = 'a'.charCodeAt()
    for (let i of s) {
        arr[i.charCodeAt() - base]++
    }
    for (let i of t) {
        arr[i.charCodeAt() - base]--
    }
    for (let i = 0; i < 26; i++) {
        if (arr[i] != 0) {
            return false
        }
    }
    return true
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/432754
推荐阅读
相关标签
  

闽ICP备14008679号