有效字母异位词

199 阅读2分钟

题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例

输入: s = 'anagram', t = 'nagaram'
输出: true

输入: s = 'rat', t = 'car'
输出: false

字母异位词解释

字母异位词是指由相同的字母按照不同的顺序组成的单词,根据此含义,那么这两个单词的长度也一定相等,所以我们就可以先将两个单词按照字母的大小进行排序,然后比较两个单词对应位置上的字母是否相等。

方法一

思路

对字符串字母进行排序,然后比较是否相等

详解

  1. 将字符串转为数组
  2. 利用 sort 方法进行排序
  3. 然后转为字符串比较

代码

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

方法二

思路

声明一个对象记录字符串每个字母的个数,另外一个字符串每项与得到的对象做匹配,最后,根据 计数判断是否相等。

详解

  1. 首先,声明一个变量,遍历其中一个字符串 s 或 t,对每个字母出现的次数进行累加。
  2. 然后,遍历另一个字符串,使每一个字母在已得到 的对象中做匹配,如果匹配则对象下的字母个数减 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