LeetCode(242):有效的字母异位词

题目描述

解题思路

这道题目的本质 可以理解为 判断2个字符串中 各字符出现的次数是否一致

方法一:数组

我们可以通过js提供的几个方法,将原字符串整理成 排好序的字符串
例如:"array"整理成"aarry"
在这种情况下,只需比较2个字符串是否完全相同即可

1、split方法
用于将字符串分隔成字符串数组
2、sort方法
用于对字符串数组排序
3、join方法
用于将数组中的所有元素拼接成字符串

方法二:哈希表

利用js提供的Map对象,存储第一个字符串中 各个字母出现的次数
然后再遍历第二个字符串
若当前字符在Map中不存在,则直接返回false
否则,则对当前字符对应的value值减一
遍历结束后,判断Map对象是否为空
若为空,则说明2个字符串中的字母及其出现次数是匹配的

简单说明 Map 提供的几个常用方法
.get(key)-返回key对应的value,若不存在,则返回undefined
.set(key,value) -修改key对应的value
.delete(key) -删除指定的key
.size -哈希表的大小(key的个数)

代码

// 方法一
var isAnagram = function(s, t) {
    if(s.length!==t.length){
        return false
    }
    
    var newS=s.split("").sort().join()
    var newT=t.split("").sort().join()

    return newS===newT
};
// 方法二
var isAnagram = function(s, t) {
    if(s.length!==t.length){
        return false
    }
    
    const map=new Map()
    for(let i=0;i<s.length;i++){
        let count=map.get(s.charAt(i))
        if(count===undefined){
            map.set(s.charAt(i),1)
        }else{
            map.set(s.charAt(i),count+1)
        }
    }

    for(let i=0;i<t.length;i++){
        let count=map.get(t.charAt(i))
        if(count===1){
            map.delete(t.charAt(i))
        }else if(count===undefined){
            return false
        }else{
            map.set(t.charAt(i),count-1)
        }
    }

    if(map.size===0){
        return true
    }else{
        return false
    }
};
原文地址:https://www.cnblogs.com/baebae996/p/13883569.html