详解 LeetCode 第 242 题 - 有效的字母组

目录


码题目:LeetCode 242. 有效的字母组

题目描述

给定两个字符串 st,请判断是否为字母组(Anagram)。

如果 t 是通过打乱 s 的字符并重新排列所得到的,那么它们是字母组。

例如:

ini 复制代码
输入: s = "anagram", t = "nagaram"

解题思路

我们需要确认两个字符串是否含有相同的字符,并且各字母出现的次数也相同。

这里使用 JavaScript 中的 Map 类型来统计字母的出现次数是非常有效的方法。


代码分析

ini 复制代码
var isAnagram = function (s, t) {

  if (s.length !== t.length) return false;

  for (let i = 0; i < s.length; i++) {

    map.set(s[i], (map.get(s[i]) || 0) + 1);

    map.set(t[i], (map.get(t[i]) || 0) - 1);

  return Array.from(map.values()).every((value) => value === 0);

步骤说明

  1. 长度判断 :如果 st 的长度不等,直接返回 false

  2. Map 统计

    • 通过 for 循环,同时遍历 s[i]t[i]

    • s[i] 的计数 +1t[i] 的计数 -1

    • 如果是字母组,那么最后 Map 里所有值必然是 0

  3. 结果判断 :判断 Map 所有 value 是否都等于 0,如果是,则返回 true,否则返回 false


图解原理

s = "anagram", t = "nagaram" 为例,观看 Map 如何变化:

css 复制代码
  s[0] = 'a' → map[a] = 1

  t[0] = 'n' → map[n] = -1

  s[1] = 'n' → map[n] = 0

  t[1] = 'a' → map[a] = 0

  s[2] = 'a' → map[a] = 1

  t[2] = 'g' → map[g] = -1

  s[3] = 'g' → map[g] = 0

  t[3] = 'a' → map[a] = 0

  s[4] = 'r' → map[r] = 1

  t[4] = 'r' → map[r] = 0

  s[5] = 'a' → map[a] = 1

  t[5] = 'a' → map[a] = 0

  s[6] = 'm' → map[m] = 1

  t[6] = 'm' → map[m] = 0

最终 map = {a:0, n:0, g:0, r:0, m:0} → 全部值为 0,说明是字母组


优势分析

  • 时间复杂度: O(n)

  • 空间复杂度: O(1)(因为最多字母数量是有限的)

此算法方案相比直接排序字符串后比较的方法而言,更加高效。


小结

该题目是实际中常见的字符组合问题,本解法利用 Map 展现了非常高效的计数思路。推荐在做类似字符组问题时使用。

本文使用 文章同步助手 同步

相关推荐
广药门徒3 分钟前
OpenMV IDE 的图像接收缓冲区原理
前端·人工智能·python
霸王蟹7 分钟前
常见面试题:Webpack的构建流程简单说一下。
前端·笔记·学习·webpack·node.js·vue
黄暄11 分钟前
Linux项目部署全攻略:从环境搭建到前后端部署实战
java·linux·运维·服务器·前端·后端·持续部署
island131437 分钟前
JAVA Web 期末速成
java·开发语言·前端
小峰编程1 小时前
Python函数——万字详解
linux·运维·服务器·开发语言·前端·网络·python
11054654012 小时前
23、电网数据管理与智能分析 - 负载预测模拟 - /能源管理组件/grid-data-smart-analysis
前端·能源
开发者小天2 小时前
React中startTransition的使用
前端·react.js·c#
@PHARAOH3 小时前
WHAT - 缓存命中 Cache Hit 和缓存未命中 Cache Miss
前端·缓存
海天胜景4 小时前
无法加载文件 E:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
MingT 明天你好!4 小时前
在vs code 中无法运行npm并报无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查
前端·npm·node.js·visual studio code