问答题467/1593有效的变位词

给定两个字符串 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 仅包含小写字母
1/** 2 * @param {string} s 3 * @param {string} t 4 * @return {boolean} 5 */ 6var isAnagram = function(s, t) { 7 8};
难度:
2023-05-30 创建

参考答案:

题目分析

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

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

方法一

  • 搜集s字符串各个字符数量
  • 遍历t字符串,递减数组各个字符数量
  • 若有字符数量为负,则为无效,否则是有效
1/** 2 * @param {string} s 3 * @param {string} t 4 * @return {boolean} 5 */ 6var isAnagram = function(s, t) { 7 if(s === t || s.length != t.length) { 8 return false 9 } 10 let table = new Array(26).fill(0) 11 for(let i = 0; i < s.length; i ++) { 12 table[s.charCodeAt(i) - 'a'.charCodeAt(0)] ++ 13 } 14 for(let i = 0; i < t.length; i ++) { 15 table[t.charCodeAt(i) - 'a'.charCodeAt(0)] -- 16 if(table[t.charCodeAt(i) - 'a'.charCodeAt(0)] < 0) { 17 return false 18 } 19 } 20 return true 21};

方法二

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

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

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

最近更新时间:2023-06-09

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!