【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 * 104s和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:官方解释 简单来说,可以传递一个排序函数,也可以什么都不传,不传时,采用默认排序方式进行排列。
将两个字符串做同样的分解、排序、拼接的步骤之后,再进行比对,就可以完美判断两个字符串是否相等了。
神仙操作,主要代码就一行,没有用循环,大大降低了时间和空间的损耗,堪称完美!