求star

开源不易,喜欢请点个star吧

Ocean Han
322 字
2 分钟
Leetcode->有效的字母异位词
2022-07-17

题目#

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • st 仅包含小写字母

解题:key:#

①排序后比较#

TIP

​ 如果两个字符串长度不同,显然不满足题意,直接返回false即可

​ 既然是由相同数量和种类字符构成的,则将两个字符串进行排序,然后比较即可

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if(s.length !== t.length)
        return false
    let newS = s.split('').sort().join('')
    let newT = t.split('').sort().join('')
    return newS === newT
};

附上官方题解:

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

② 哈希表#

TIP

​ 建立一个频次表,记录s中每种字母出现的次数,然后减去t中每种字母出现的次数

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if(s.length !== t.length)
        return false
    let table = new Array(26).fill(0)
    for(let i=0;i<s.length;i++){
        table[s.codePointAt(i)-'a'.codePointAt(0)]++
    }
    for(let i=0;i<t.length;i++){
        table[t.codePointAt(i) - 'a'.codePointAt(0)]--
        if(table[t.codePointAt(i) - 'a'.codePointAt(0)] < 0){
            return false
        }
    }
    return true
};
Leetcode->有效的字母异位词
https://blog.oceanh.top/posts/algorithm/有效的字母异位词/
作者
Ocean Han
发布于
2022-07-17
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49