「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」
给定两个字符串 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仅包含小写字母
解题思路如下:
本题通过题意可知如果两个字符串互为字母异位词,那么它们的字符构成是一样的,只不过字符的位置可能不一样
首先判断两个字符串长度是否相等,如果不等,则肯定不会互为字母异位词
然后通过 map 记录每个字符串中出现的字符及其出现的次数
遍历某个字符的 map ,判断另一个字符的 map 中是否存在同样的 key 以及对应的值 val 是否相等,如果不相等,则说明不是互为字母异位词
如果相等,在两个 map 中同时删除该 key
最后判断两个字符串对应的 map 是否都为空即可
代码如下:
var isAnagram = function(s, t) {
const lens = s.length,
lent = t.length;
// 判断长度是否相等
if(lens !== lent) return false;
// map记录出现的字符及其数量
const maps = new Map(),
mapt = new Map();
for(let i = 0;i<lens;i++){
let cur = s[i]
if(maps.has(cur)){
maps.set(cur,maps.get(cur)+1)
}else{
maps.set(cur,1)
}
cur = t[i]
if(mapt.has(cur)){
mapt.set(cur,mapt.get(cur)+1)
}else{
mapt.set(cur,1)
}
}
// 对比两个map是否相等
for(let item of maps){
if(mapt.get(item[0])!== item[1]) return false;
maps.delete(item[0])
mapt.delete(item[0])
}
// 如果两个map均为空,则说明是互为字母异位词
return maps.size===0 && mapt.size===0
};
至此我们就完成了 leetcode-242-有效的字母异位词
如有任何问题或建议,欢迎留言讨论!