Skip to content

有效的变位词

Posted on:2023年6月9日 at 09:25

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

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

示例 1:

输入: s = “anagram”, t = “nagaram”

输出: true

示例 2:

输入: s = “rat”, t = “car”

输出: false

示例 3:

输入: s = “a”, t = “a”

输出: false

提示:

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function (s, t) {};

题目分析

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

方法一

/**
 * @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 分别排序,看排序后的字符串是否相等。

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

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

原文转自:https://fe.ecool.fun/topic/e834149b-923e-4565-8c26-2a43a5b98085