刷题记录6.24

438. 找到字符串中所有字母异位词https://leetcode.cn/problems/find-all-anagrams-in-a-string/

这道题乍一看感觉很复杂。因为 异位词指由相同字母重排列形成的字符串,包括相同的字符串,那么就会有很多种组成,增加题目的复杂性。

对于这个我们可以转化成计算字母出现的频率,如果频率一致即符合要求。

这道题的思路:滑动窗口

根据题目要求,我们需要在字符串 s 寻找字符串 p 的异位词。

因为字符串 p 的异位词的长度一定与字符串 p 的长度相同 ,所以我们可以在字符串 s 中构造一个长度为与字符串 p 的长度相同的滑动窗口 ,并在滑动中维护窗口中每种字母的数量;++当窗口中每种字母的数量与字符串 ppp 中每种字母的数量相同时,则说明当前窗口为字符串 ppp 的异位词。(这个思路真的很妙)++

可以使用数组来存储字符串 ppp 和滑动窗口中每种字母的数量

将字符转成数字0~26,在存储时将字符-'a'.charCodeAt()

charCodeAt()是一个字符串方法,用于获取指定位置字符的**Unicode编码,**返回一个表示给定索引处字符的Unicode值的整数。

javascript 复制代码
str.charCodeAt(index)

其中,`str`是要进行操作的字符串,`index`是要获取字符编码的位置索引。

索引从0开始,表示字符串中的第一个字符。

正确用法

  1. 直接在字符串中使用:

    javascript 复制代码
    var str = "Hello"; console.log(str.charCodeAt(0)); // 输出:72 (H的Unicode编码)

    需要注意的是,如果提供的索引超出字符串的长度范围,`charCodeAt()`将返回NaN(非数字)】

  2. 在单个字符上使用:

javascript 复制代码
var char = 'A'; console.log(char.charCodeAt(0)); // 输出:65 ('A'的Unicode编码)

(单个字符时候也可以不写0)

  1. 通过获取字符串中的一个字符再使用:

    javascript 复制代码
    var str = "World"; 
    var char = str.charAt(2); // 获取字符串中的第三个字符 'r' 
    console.log(char.charCodeAt(0)); // 输出:114 ('r'的Unicode编码)

言归正传,对于题目,初始时可以做判断,当字符串 s 的长度小于字符串 p 的长度时,字符串 s 中一定不存在字符串 p 的异位词,可以直接返回掉。

但是因为字符串 s 中无法构造长度与字符串 p 的长度相同的窗口,所以这种情况需要单独处理

这里面可以注意一下,滑动窗口滑动处理的妙处。

遍历时,当前 i 指的是滑动窗口前一个字符,往后滑动时要删除前一个字符的记录,加上窗口后的字符记录。

思路捋清楚就很简单了。

判断是否相同时,只需要将记录字母出现频率的数组用toString转为字符串对比即可。

相关推荐
breeze jiang3 天前
NestJS MVC 实战:用 hello 项目 7 个文件讲清分层、装饰器、依赖注入与错误处理
node.js·mvc·js
weixin_431600445 天前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
記億揺晃着的那天6 天前
NAS 内网域名访问为什么需要浏览器授权
网络·nginx·js·nas
—Qeyser6 天前
html 可视化海报模板编辑器
css·html·js
我命由我123457 天前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
其美杰布-富贵-李13 天前
第 8 篇:Three.js 材质系统
javascript·three.js·js
. . . . .24 天前
EJS模板引擎
js
shawxlee1 个月前
vue3在public下封装config.js自定义配置动态数据,可在打包后直接修改,方便后端部署及后续维护
前端·javascript·经验分享·vue·团队开发·js·项目优化
陆康永1 个月前
JavaScript 数组填充:Array.from 与 Array.fill 用法详解及核心区别
js·array
熊猫钓鱼>_>1 个月前
ArkTS 方舟编程语言 · 原创快速入门教程
运维·架构·ts·harmonyos·arkts·鸿蒙·js