[路飞]_程序员必刷力扣题: 有效的字母异位词

302 阅读2分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

有效的字母异位词

力扣链接

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

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

示例 1:

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

提示:

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

方法一:哈希表

思路

要证明两个字符串中的每个字母出现的次数相同,那么其实就是将每个字符串中的所有字符进行统计,在统计结束后,对统计结果进行对比,如果结果在字符串种类和数量上都保持一致,则返回true 否则 false

首先我们要对两个字符串的长度进行比较,如果长度都不一致则直接返回false 无需比较

长度一致后,这里我们通过for循环对字符串进行遍历,并吧字符串保存在队名的map中,如sMap['a'] = 3;统计结束后,用for in 遍历map表,同时与另一个字符串的map中保存的数据进行对比,若不一致则返回false,都一致则在函数末尾返回true

function pushMap(map, key) {
    if (map[key]) {
        map[key]++
    } else {
        map[key] = 1
    }
}
var isAnagram = function (s, t) {
    var sMap = {}
    var tMap = {}
    if (s.length !== t.lengthreturn false
    for (var i = 0; i < s.length; i++) {
        pushMap(sMap, s[i])
        pushMap(tMap, t[i])
    }
    for (var key in sMap) {
        if (sMap[key] !== tMap[key]) return false
    }
    return true
};

方法二:排序

思路

因为我们最后要证明两个字符串中每个字母出现的次数是否相同

所以我们可以对字符串的字母进行重组,按照26字母的顺序进行排序:

  • 将没一个字符解构成数组,然后用sort函数直接排序,最后用join以空字符串''拼接起来,得到新的字符串

两字符串进行比较,完全相等则证明满足条件返回true,否则就返回false即可

var isAnagram = function (s, t) {
    var s = [...s].sort().join('')
    var t = [...t].sort().join('')
    return s===t
};