本文主要讲解力扣刷题第242题:有效字母
总结:本题思路最主要用到的思想就是:创建一个map,两个单词(s,t)共用一个map,s的每个首次出现的字母的值为1,如果在s中这个字母又一次出现,则我们在map中把这个字母的value加一,同理,t与s共用一个map,但t的首次出现字母的值设置为-1,如果在t中重复出现,则减一。
这样循环遍历到最后,就会有正负融合的情况,最后只需要判断map里面是否还有字母的value不为0即可。
根据上面的思路,我们整理出以下代码。
var isAnagram = function(s, t) {
//首先判断最基本的条件,两个单词的长度是否一致。不一致则不可能形成异位词。
if(s.length !== t.length){
return false
}
//创建一个新的map,这个map其实就是记录两个单词的字母数的一个正负值,s首次出现的字母为1,重复则加一,t首次出现的字母为-1,重复则减一
let map = new Map()
for(let i = 0;i<s.length;i++){
if(map.has(s[i])){
map.set(s[i],map.get(s[i])+1)
}
else{
map.set(s[i],1)
}
\
if(map.has(t[i])){
map.set(t[i],map.get(t[i])-1)
}
else{
map.set(t[i],-1)
}
}
// 最后map进行遍历,遍历里面每个字母的key和value,value不为0则说明两个单词的字母进行正负值结合后,还有多余的字母,这个情况也绝对不是异位单词。
for(const letter of map){
if(letter[1]!==0){
return false
}
}
return true
};