【javascript力扣刷题 242 有效字母】

135 阅读1分钟

本文主要讲解力扣刷题第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
};