开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第45天,点击查看活动详情
题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
来源:力扣(LeetCode)
- 示例 1
输入: s = "anagram", t = "nagaram"
输出: true
- 示例 2
输入: s = "rat", t = "car"
输出: false
提示:
- 1 <= s.length, t.length <= 5 * 104
- s 和 t 仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
思路分析
根据题意可知,题目给出给定两个字符串 s 和 t。需要判断字符串t是否字符串s的字母异位词,啥是异位词呢?当字符串s 和字符粗 t 中每个字符出现的次数都相同,就可以称 s 和 t 互为字母异位词。
首先字符串s和字符粗t的长度一定是相同的,若是不相同,就直接返回false。
异位词里面的字符出现的次数一定是相同的。可以使用map来存字符和相对应出现的次数。循环字符串s,判断map是否有字符串里面的字符,若是没有就把它存进去,次数为1;若是map里面有字符,就在相应的次数加1。循环结束,字符串s所有的字符以及相对应的次数都存进去了。
循环字符串t,判断里面每个字符是否有在map里面,若是有就将次数减1,直到次数为0;若是没有在map出现,就可以直接return出去了。
AC代码
function solution(s, t) {
if(s.length !== t.length) {
return false
}
let map = new Map();
for(const item of s) {
if(map.has(item)) {
map.set(item, (map.get(item) + 1))
} else {
map.set(item, 1);
}
}
console.log(map);
for(const item of t) {
if(map.has(item) && map.get(item) > 0) {
map.set(item, map.get(item)-1);
}else{
return false;
}
}
return true;
}
let s = "anagram", t = "nagaram";
solution(s, t);