322 字
2 分钟
Leetcode->有效的字母异位词
题目
给定两个字符串 *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 * 104
s
和t
仅包含小写字母
解题:key:
①排序后比较
TIP 如果两个字符串长度不同,显然不满足题意,直接返回false即可
既然是由相同数量和种类字符构成的,则将两个字符串进行排序,然后比较即可
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if(s.length !== t.length)
return false
let newS = s.split('').sort().join('')
let newT = t.split('').sort().join('')
return newS === newT
};
附上官方题解:
var isAnagram = function(s, t) {
return s.length == t.length && [...s].sort().join('') === [...t].sort().join('')
};
② 哈希表
TIP 建立一个频次表,记录s中每种字母出现的次数,然后减去t中每种字母出现的次数
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if(s.length !== t.length)
return false
let table = new Array(26).fill(0)
for(let i=0;i<s.length;i++){
table[s.codePointAt(i)-'a'.codePointAt(0)]++
}
for(let i=0;i<t.length;i++){
table[t.codePointAt(i) - 'a'.codePointAt(0)]--
if(table[t.codePointAt(i) - 'a'.codePointAt(0)] < 0){
return false
}
}
return true
};
Leetcode->有效的字母异位词
https://blog.oceanh.top/posts/algorithm/有效的字母异位词/