题目描述
解题思路
这道题目的本质 可以理解为 判断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
}
};