【LeetCode】242.有效的字母异位词

108 阅读2分钟

【LeetCode】242.有效的字母异位词

给定两个字符串 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 * 104
  • s 和 t 仅包含小写字母

解题思路:

这题似乎和389. 找不同非常相似,甚至解题思路应该都是一样的。

直接了当,使用映射表,来完成这题,直接上代码:

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if(s.length !== t.length) return false
    let map={s:{},t:{}}
    s.split('').forEach(item=>{
        if(map.s[item] == undefined){
            map.s[item] = 0
        }else{
            map.s[item] += 1
        }
    })
    t.split('').forEach(item=>{
        if(map.t[item] == undefined){
            map.t[item] = 0
        }else{
            map.t[item] += 1
        }
    })
   
    let res = true
    let tag = s.length > t.length ? 's' : 't'
    for(let i in map[tag]){
        if(map.s[i]!=map.t[i]){
            res = false
        }
    }
    return res
};

好像是能够完成题目需求了,额,难道这就完了?

不行,要搞点骚操作,不然这种解法大家都会,谁还来看你的文章啊!

说搞就搞,安排!

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if(s.length !== t.length) return false
    return s.length === t.length && [...s].sort().join('') === [...t].sort().join('')
};

哦豁,这代码简洁度,这效率,简直没谁了。

相信大家都看懂了,但我还是要给大家解释一波:

拓展运算符:不仅可以解构赋值数组对象,还能结构字符串

sort官方解释 简单来说,可以传递一个排序函数,也可以什么都不传,不传时,采用默认排序方式进行排列。

将两个字符串做同样的分解、排序、拼接的步骤之后,再进行比对,就可以完美判断两个字符串是否相等了。

神仙操作,主要代码就一行,没有用循环,大大降低了时间和空间的损耗,堪称完美!