题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例
输入: s = 'anagram', t = 'nagaram'
输出: true
输入: s = 'rat', t = 'car'
输出: false
字母异位词解释
字母异位词是指由相同的字母按照不同的顺序组成的单词,根据此含义,那么这两个单词的长度也一定相等,所以我们就可以先将两个单词按照字母的大小进行排序,然后比较两个单词对应位置上的字母是否相等。
方法一
思路
对字符串字母进行排序,然后比较是否相等
详解
- 将字符串转为数组
- 利用 sort 方法进行排序
- 然后转为字符串比较
代码
const s = 'anagram';
const t = 'nagaram';
const isAnagram = (s, t) => {
const sArr = s.split('');
const tArr = t.split('');
const sortFn = (a, b) => {
return a.charCodeAt() - b.charCodeAt()
};
sArr.sort(sortFn);
tArr.sort(sortFn);
return sArr.join('') === tArr.join('')
}
console.log(isAnagram(s, t))//true
方法二
思路
声明一个对象记录字符串每个字母的个数,另外一个字符串每项与得到的对象做匹配,最后,根据 计数判断是否相等。
详解
- 首先,声明一个变量,遍历其中一个字符串 s 或 t,对每个字母出现的次数进行累加。
- 然后,遍历另一个字符串,使每一个字母在已得到 的对象中做匹配,如果匹配则对象下的字母个数减 1,如果匹配不到,则返回 false,如果最后对象中每个字母个数都为 0,则表示两字 符串相等。
代码
const isAnagram = (s, t) => {
if(s.length !== t.length) {
return false
}
const hash = {}
for (const k of s) {
hash[k] = hash[k] || 0;
hash[k] += 1;
}
for (const k of t) {
if(!hash[k]) {
return false;
}
hash[k] -= 1;
}
return true
}
引用
政采云 算法101