JS一行代码判断 有效的字母异位词

312 阅读2分钟

正题

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

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:
输入: s = "anagram", t = "nagaram"
输出: true

示例 2:
输入: s = "rat", t = "car"
输出: false

先上代码:

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    return  s.split('').sort((a,b) => {return a.charCodeAt() - b.charCodeAt()}).join() === t.split('').sort((a,b) => {return a.charCodeAt() - b.charCodeAt()}).join()
};

乍一看代码虽然只有一行,但是很长,咱们可以慢慢解析。

核心思想:转成升序字符串,比较是否相同

首先拆解等号前面部分

s.split('').sort((a,b) => {return a.charCodeAt() - b.charCodeAt()}).join()

入参 st皆为字符串,第一步使用 split 函数将字符串转化为字符串数组

到这将 s 转化为数组,但是数组并不能比较是否字母相同。我们必须按照一定规则给他们排序,那么只要左右两边都按照这个规则给他排序,如果相同的话,那么我们可以认为这个是 有效的字母异位词

第二步,使用数组 sort 方法进行排序,排序的条件是 charCodeAt() 升序

charCodeAt函数: 返回字符串第一个字符的 Unicode 编码(H 的 Unicode 值)

e824b899a9014c08bcd720b8057b02087bf4f43b.jpeg 图为: Unicode 编码表

将每个字符用数字量化,那么就可以将每个字符进行排序了。排序之后,数组内的字符会按照对应编码表的顺序升序排列!

第三步,将字符串数组转回字符串,为什么要这么做?

好比较!

左右两边对 st 做同样的操作后,直接使用 === 号比较,比较的结果就是是否为 有效的字母异位词的结果了!