【数据结构与算法】力扣 242. 有效的字母异位词

题目描述

给定两个字符串 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
  • s 和 t 仅包含小写字母

分析解答

比较字符串内字符的个数相同,很容易想到将各个字符作为一个key 存入一个对象中,个数相同就是这些键值是否相同。

此时会发现存在一个问题:那就是key 的顺序不同也会导致判断不同。所以判断是否相同时需要先将key进行排序。

这种类似于暴力解答,直接进行判断。

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function (s, t) {
    let sHash = {}
    let tHash = {}
    for (let i = 0; i < s.length; i++) {
        if (!sHash[s[i]]) {
            sHash[s[i]] = 1
            continue
        }
        sHash[s[i]]++
    }
    for (let i = 0; i < t.length; i++) {
        if (!tHash[t[i]]) {
            tHash[t[i]] = 1
            continue
        }
        tHash[t[i]]++
    }
    console.log(JSON.stringify(sHash))
    console.log(JSON.stringify(tHash))
    return isEqual(sHash, tHash)
};

function isEqual(obj1, obj2) {
    // 获取对象的键
    const keys1 = Object.keys(obj1).sort();
    const keys2 = Object.keys(obj2).sort();
    // 检查键的数量
    if (keys1.length !== keys2.length) {
        return false;
    }
    // 检查键的值是否相等
    for (let i = 0; i < keys1.length; i++) {
        const key = keys1[i];
        if (key !== keys2[i] || obj1[key] !== obj2[key]) {
            return false;
        }
    }
    return true;
}

console.log(isAnagram('ab', 'a'))

思路拓展

这里讲一下哈希法。

主要思路:就是在 arr 中放26个位置,值全为0。然后遍历 s,在 a-z 的对应位置加 1,然后遍历 t,在 a-z 的对应位置减 1,所以 s 和 t 相同的话,那么所有位置应该还是 0。

js 这里需要用 charCodeAt 获取 ascii 值。

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function (s, t) {
    if (s.length !== t.length) {
        return false
    }
    let arr = new Array(26).fill(0);
    const base = 'a'.charCodeAt()
    for (let i of s) {
        arr[i.charCodeAt() - base]++
    }
    for (let i of t) {
        arr[i.charCodeAt() - base]--
    }
    for (let i = 0; i < 26; i++) {
        if (arr[i] != 0) {
            return false
        }
    }
    return true
};

相关推荐

  1. 数据结构算法】力 242. 有效字母

    2024-04-10 07:10:01       14 阅读
  2. -242. 有效字母

    2024-04-10 07:10:01       46 阅读
  3. 242. 有效字母

    2024-04-10 07:10:01       35 阅读
  4. 242. 有效字母(力LeetCode)

    2024-04-10 07:10:01       32 阅读
  5. 242-有效字母

    2024-04-10 07:10:01       39 阅读
  6. leetcode242. 有效字母

    2024-04-10 07:10:01       41 阅读
  7. 【Leetcode】242.有效字母

    2024-04-10 07:10:01       37 阅读
  8. Leetcode242.有效字母

    2024-04-10 07:10:01       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 07:10:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 07:10:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 07:10:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 07:10:01       20 阅读

热门阅读

  1. unity学习笔记 UnityWebRequest使用心得

    2024-04-10 07:10:01       14 阅读
  2. Android 在xml 布局中如何嵌套 Jetpack Compose

    2024-04-10 07:10:01       12 阅读
  3. Spring 之 IoC基于XML管理Bean

    2024-04-10 07:10:01       14 阅读
  4. 010 spring整合mybatis(事务)(xml)

    2024-04-10 07:10:01       14 阅读
  5. MySQL 建表语句详解

    2024-04-10 07:10:01       13 阅读
  6. hive-分桶-索引(初篇)

    2024-04-10 07:10:01       15 阅读
  7. Golang 实现一个简单的 RPC 服务

    2024-04-10 07:10:01       19 阅读
  8. Servlet3.0 Http函数 介绍 + upload file 源码阅读

    2024-04-10 07:10:01       12 阅读
  9. 【vim 学习系列文章 18 -- 选中行前后增加两行】

    2024-04-10 07:10:01       14 阅读