leetcode438 找到字符串中所有字母的异位词

题目

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例

输入: s = “cbaebabacd”, p = “abc”
输出: [0,6]
解释:
起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。
起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。

解析

这道题还是用滑动窗口来处理(看题解也费了半天劲),如果按照之前的拿到“无重复字符的最长子串”的思路来做的话,大概是下面这个样子:

func findAnagrams(s string, p string) (ans []int) {window := [128]int{} // 存储每个字符出现的次数for _, ch := range p {window[ch]++ // 把P中每个字符都先放到窗口数组中}left := 0 // 滑动窗口左边界for right, ch := range s { // 遍历s字符串window[ch]--         // 先将遍历到的字符在窗口中减1for window[ch] < 0 { // 表示字符ch的出现次数,已经超过了其在P中的出现次数window[s[left]]++ // 窗口右移(指左边界右移)left++}if right-left+1 == len(p) {ans = append(ans, left)}}return
}

第二种滑动窗口的方法如下:

func findAnagrams1(s, p string) (ans []int) {sLen := len(s)pLen := len(p)if sLen < pLen {return}var sWindow, pWindow [26]intfor i, c := range p { // 先把p长度的数据都存进各自的滑动窗口中sWindow[s[i]-'a']++pWindow[c-'a']++}if sWindow == pWindow { // 前置位置的判断,只需要这一次判断ans = append(ans, 0)}// 在这之后pWindow只是用来比较的,没有更新的场景了for i, c := range s[:sLen-pLen] { // 从s字符串的首位开始遍历(这里减去P长度的意思是,每个窗口的大小是pLen,不减的话最后一位就越界了)// 在这里的移动窗口,不是根据left、right来处理的,而是将当前窗口的第一个字符在数组中的位置减1sWindow[c-'a']--         // 将窗口内对应字符的值-1sWindow[s[i+pLen]-'a']++ // 将最后一个字符的下一个字符加1(相当于窗口整体滑动了一位)if sWindow == pWindow {ans = append(ans, i+1) // 如果滑动后的新窗口满足条件,将起始下标返回,此时在这个的循环中,因为已经滑动了,起始下标就是i+1}}return
}

整体上来看,第二种方法比较符合认知中的滑动窗口,而第一种方法是和之前的题目解法相似,且只需要新开一个数组就可以。
另外,第二道题如果不想每次-'a’的话,可以把数组的长度设置为128(ASCII的长度)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/843967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据挖掘与机器学习——回归分析

目录 回归分析定义&#xff1a; 案例&#xff1a; 线性回归 预备知识&#xff1a; 定义&#xff1a; 一元线性回归&#xff1a; 如何找出最佳的一元线性回归模型&#xff1a; 案例&#xff1a; python实现&#xff1a; 多元线性回归 案例&#xff1a; 线性回归的优缺…

大疆、猛犸、西圣无线麦克风哪个牌子好?大疆、西圣麦克风测评PK

在当今这个全民参与媒体创作的时代&#xff0c;视频分享已经崛起为引领流行文化的关键力量。随着自媒体领域的竞争日益白热化&#xff0c;要想在浩瀚的内容海洋中脱颖而出&#xff0c;创作出卓越的作品无疑是吸引观众目光的核心要素。然而想要成功打造这样的佳作&#xff0c;除…

学习Uni-app开发小程序Day21

学习了评分组件、自定义导航栏 评分组件uni-rate 这是需要达到的效果图&#xff0c;这里先分析下效果图&#xff0c; 1、图片是从布局中间弹出的&#xff0c;那这里就要用到uni-popup &#xff0c;设置type从中间弹出 2、这个弹出的顶部和上一张的顶部布局是一样的&#xff0c…

域名绑定ip和端口的方法是什么?

在互联网世界中&#xff0c;域名绑定IP和端口是实现网站精准访问的关键步骤。域名是用户访问网站的直观标识&#xff0c;而IP地址和端口号则指明了服务器的具体位置和通信接口。本文将详细介绍域名绑定IP和端口的过程。 域名与IP地址的关系 域名是互联网上网站的人类可读地址…

水电表远程抄表:智能化时代的能源管理新方式

1.行业背景与界定 水电表远程抄表&#xff0c;是随着物联网技术发展&#xff0c;完成的一种新型的能源计量管理方式。主要是通过无线传输技术&#xff0c;如GPRS、NB-IoT、LoRa等&#xff0c;将水电表的信息实时传输到云服务器&#xff0c;进而取代了传统人工当场抄水表。这种…

SBOM生成之CycloneDX

SBOM是一份信息详尽、机器可读的形式化清单&#xff0c;其中囊括了软件所有组件的详尽信息及它们之间的层级关系。 主流SBOM格式标准分别是SPDX、CycloneDX和SWIDCycloneDX格式&#xff1a;是一种轻量级的标准&#xff0c;专为应用安全和供应链组件分析而设计&#xff0c;专注于…

企业微信群营销SOP:打造高效、系统的营销流程

随着企业微信在企业营销中的广泛应用&#xff0c;构建一套高效、系统的微信群营销SOP&#xff08;Standard Operating Procedure&#xff0c;标准操作程序&#xff09;已成为企业提升营销效果、优化客户体验的关键。本文将深入探讨企业微信群营销SOP的重要性、构建方法以及实施…

目标检测——家庭日常用品数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

详解 Scala 面向对象相关知识

一、包 1. 作用 区分相同名字的类当类很多时&#xff0c;可以很好的管理类控制访问范围 2. 声明语法 // 第一种&#xff1a;与 Java 一致&#xff0c;以 . 作为层级划分 package package_name// 第二种&#xff1a;以 {} 作为层级划分 /*1. 一个源文件中可以声明多个 packa…

CentOS 7如何使用systemctl管理应用

说明&#xff1a;本文介绍如何使用systemctl命令的方式来启动、查看、停止和重启应用&#xff0c;以安装后的prometheus、alertmanager为例&#xff1b; Step1&#xff1a;创建文件 在系统/etc/systemd/system/路径下&#xff0c;创建一个xxx.service文件&#xff0c;该文件内…

【LinuxC语言】glob函数

文章目录 前言glob函数介绍函数原型参数说明返回值`glob_t`结构示例代码globfree函数介绍参数说明总结前言 在Linux系统编程中,经常需要操作文件和目录,尤其是处理文件名模式匹配的情况,例如查找特定类型的文件或批量处理文件。C语言标准库提供了glob函数来满足这种需求,它…

【最优化方法】实验二 一维搜索方法的MATLAB实现

实验二  一维搜索方法的MATLAB实现 实验的目的和要求&#xff1a;通过本次实验应使学生掌握如何使用MATLAB软件进行一维搜索&#xff0c;并学会对具体问题进行分析。 实验内容&#xff1a; &#xff11;、0.618法的MATLAB实现 &#xff12;、Fibonacci法的MATLAB实现 学…

机器学习(五) -- 监督学习(4) -- 集成学习方法-随机森林

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;3&#xff09; -- 决策树 下篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;5&#xff09; -- 线性回归1 前言 tips&#xff1a;标题前有“***”…

150.二叉树:二叉树的后序遍历(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}* Tree…

vite开发服务器server选项配置(2024-05-29)

server.host​ 类型&#xff1a; string | boolean默认&#xff1a; localhost 指定服务器应该监听哪个 IP 地址。 如果将此设置为 0.0.0.0 或者 true 将监听所有地址&#xff0c;包括局域网和公网地址。 也可以通过 CLI 使用 --host 0.0.0.0 或 --host 来设置。 NOTE 在某些…

Autoware 技术代码解读(三)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&#xff0c;并附带200G…

​一款开源的.NET程序集反编译、编辑和调试神器

前言 说到.NET相关的反编译工具大家脑海里第一个想到的工具是什么&#xff1f;ILSpy、dnSpy、还是dotPeek&#xff1f;咱们今天的主要内容是讲讲dnSpyEx&#xff08;dnSpyEx是dnSpy项目的非官方Fork维护版本&#xff09;这个开源的.NET程序集反编译、编辑和调试工具该如何使用…

TypeScript 学习笔记(十七):TypeScript 与现代前端构建工具的结合使用

TypeScript 学习笔记(十七):TypeScript 与现代前端构建工具的结合使用 1. 引言 在前几篇学习笔记中,我们探讨了 TypeScript 的基础知识、前后端框架的结合应用、测试与调试技巧、性能优化、前端架构设计、工具和生态系统,以及 TypeScript 与数据库的深度结合和第三方库的…

Redis教程(十八):Redis的Redisson的看门狗机制

传送门:Redis教程汇总篇,让你从入门到精通 Redisson的看门狗机制 Redisson的看门狗机制主要是指客户端在获取到锁之后,通过后台线程或定时任务自动续期的功能,以避免在锁持有期间因为处理时间过长而导致锁自动释放,进而确保操作的安全性与原子性。 这个机制的工作原理是…

对于异地项目,集团总部如何进行有效管理?

近几年&#xff0c;随着全球经济的发展和企业的崛起&#xff0c;越来越多的企业开始将业务扩展到不同的地理位置。这使得异地项目的管理成为了一个重要的挑战。异地项目指的是分布在不同地区或国家的项目&#xff0c;由总部或主要管理团队远程协调和管理。在这种情况下&#xf…