给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
:::info
示例1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例2:
输入: s = “rat”, t = “car”
输出: false
:::
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
解法一
首先我们可以判读两个字符串的长度,如果长度不一致则直接返回 false.
然后我们可以构建一个哈希表map,先去遍历记录s中的元素的个数,然后再去遍历t中元素i。有以下两种情况:
map中不存在i,直接返回 false.map中存在i,map中对应记录数减一,判断map中对应记录数是否为大于 -1 ,若否则直接返回 falsevar isAnagram = function(s, t) {const lenS = s.length, lenT = t.length;if (lenS !== lenT) return false;const map = new Map();for (let i = 0; i < lenT; i++) {map.set(s[i], (map.get(s[i]) || 0) + 1);}for (let i = 0; i < lenT; i++) {if (map.has(t[i])) {map.set(t[i], map.get(t[i]) - 1);if (map.get(t[i]) < 0) {return false;}} else {return false}}return true;};
解法二
可以创建一个数组,长度为26,分别对应26个字母,然后每个元素记录
s中出现元素个数。
然后再次遍历t中元素减去相应元素记录数即可。var isAnagram = function(s, t) {if(s.length !== t.length) return false;const resSet = new Array(26).fill(0);const base = "a".charCodeAt();for(const i of s) {resSet[i.charCodeAt() - base]++;}for(const i of t) {if(!resSet[i.charCodeAt() - base]) return false;resSet[i.charCodeAt() - base]--;}return true;};
