Skip to content

有效的变位词

给定两个字符串 st ,编写一个函数来判断它们是不是一组变位词(字母异位词)。

注意:st中每个字符出现的次数都相同且字符顺序不完全相同,则称 st互为变位词(字母异位词)。

示例 1:

输入: s = "anagram", t = "nagaram"

输出: true

示例 2:

输入: s = "rat", t = "car"

输出: false

示例 3:

输入: s = "a", t = "a"

输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s and t 仅包含小写字母
js
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {

};

参考答案:

题目分析

  • 判断s和t的长度是否相等,若不相等,则s和t绝对不是变位词
  • 判断s和t是否相等,若相等,则s和t中每个字符出现的次数相同且字符顺序完全相同,s和t不是变位词
  • 若s和t不相等但长度相等,可以使用多种方法进行判断

下面介绍两种常见的实现方法:

方法一

  • 搜集s字符串各个字符数量
  • 遍历t字符串,递减数组各个字符数量
  • 若有字符数量为负,则为无效,否则是有效
js
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if(s === t || s.length != t.length) {
        return false
    }
    let table = new Array(26).fill(0)
    for(let i = 0; i < s.length; i ++) {
        table[s.charCodeAt(i) - 'a'.charCodeAt(0)] ++
    }
    for(let i = 0; i < t.length; i ++) {
        table[t.charCodeAt(i) - 'a'.charCodeAt(0)] --
        if(table[t.charCodeAt(i) - 'a'.charCodeAt(0)] < 0) {
            return false
        }
    }
    return true
};

方法二

我们可以对字符串 s 和 t 分别排序,看排序后的字符串是否相等。

js
var isAnagram = function(s, t) {
    return s.length == t.length && s !== t && [...s].sort().join('') === [...t].sort().join('')
};

PS:面试题由 “前端面试题宝典(https://fe.ecool.fun/)” 整理和录入,未授权任何机构或其他刷题工具引用。推荐官网刷题,题库更全,题目答案不定时更新~