「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」
有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母
方法一:哈希表
思路
要证明两个字符串中的每个字母出现的次数相同,那么其实就是将每个字符串中的所有字符进行统计,在统计结束后,对统计结果进行对比,如果结果在字符串种类和数量上都保持一致,则返回true 否则 false
首先我们要对两个字符串的长度进行比较,如果长度都不一致则直接返回false 无需比较
长度一致后,这里我们通过for循环对字符串进行遍历,并吧字符串保存在队名的map中,如sMap['a'] = 3;统计结束后,用for in 遍历map表,同时与另一个字符串的map中保存的数据进行对比,若不一致则返回false,都一致则在函数末尾返回true
function pushMap(map, key) {
if (map[key]) {
map[key]++
} else {
map[key] = 1
}
}
var isAnagram = function (s, t) {
var sMap = {}
var tMap = {}
if (s.length !== t.length) return false
for (var i = 0; i < s.length; i++) {
pushMap(sMap, s[i])
pushMap(tMap, t[i])
}
for (var key in sMap) {
if (sMap[key] !== tMap[key]) return false
}
return true
};
方法二:排序
思路
因为我们最后要证明两个字符串中每个字母出现的次数是否相同
所以我们可以对字符串的字母进行重组,按照26字母的顺序进行排序:
- 将没一个字符解构成数组,然后用sort函数直接排序,最后用join以空字符串''拼接起来,得到新的字符串
两字符串进行比较,完全相等则证明满足条件返回true,否则就返回false即可
var isAnagram = function (s, t) {
var s = [...s].sort().join('')
var t = [...t].sort().join('')
return s===t
};