当前位置: 首页 > news >正文

算法刷题:找到字符串中所有的字母异位词

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

  • .
  • 题目链接
  • 题目详情
  • 题目解析
  • 算法原理
    • 滑动窗口流程图
    • 定义指针及变量
    • 进窗口
    • 判断
    • 出窗口
    • 更新结果
  • 我的答案

.

在这里插入图片描述

题目链接

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

题目详情

在这里插入图片描述

题目解析

所谓的异位词,就是一个单词中的字母,打乱顺序,重新排列得到的单词
如:abc->bca
那么题目的目的就很明显了,就是要求在s字符串中找到p的异位词(相同组成,不同排列)
我们来模拟找一下
首先,定义两个指针,维护满足异位词的左右边界
在这里插入图片描述
使right往右移动
在这里插入图片描述

如图,在left与right之间,长度刚好符合p的异位词,此时,就需要对这个字符串进行校验,很,很明显,cba就属于p的异位词,校验成功,将当前异位词的首元素下标记录一下,然后使right继续往右移,但是此时子串的长度就不满足p的异位词了,因此,需要将left也往右移动一位
在这里插入图片描述
移动完成之后,此时子串的长度又满足条件了,进行校验,并不是p的异位词,继续移动,直到遍历完整个数组
很明显,整个过程通过两个指针,同向进行遍历来解决问题,而left与right之间,往右移动的过程,与窗口类似,因此我们考虑使用滑动窗口来实现这个过程

算法原理

滑动窗口流程图

在这里插入图片描述

定义指针及变量

定义两个指针:left和right,初始值都为0
创建hash表1,用数组模拟,记录p的每个字母出现的个数
创建hash表2,用数组模拟,用来记录子串(窗口)中各个字母出现的个数
定义变量count,来记录窗口中的有效字母的个数
创建链表来存储满足条件的异位词的下标

进窗口

将right所在的字母添加到hash2中,t添加完成之后
如果hash2[s[right]-‘a’]<=hash1[s[right]-‘a’]
说明当前字母是有效字母,就将count加一

判断

判断子串长度是否大于p的异位词的长度

出窗口

当窗口内子串长度大于p的异位词的长度的时候,需要将left所在的字母从hash2中减去1,在减去之前,需要再进行一层判断,判断hash2[s[left]-‘a’]<=hash1[s[left]-‘a’],如果满足,说明减去的是有效字母,因此需要将count进行减一

更新结果

如果有效字母个数count等于p的字母个数,就说明满足p的异位词,将当前子串的下标存进链表中

我的答案

class Solution {public List<Integer> findAnagrams(String ss, String pp) {//定义返回值List<Integer> list = new ArrayList<>();//将ss和pp转换为数组,方便遍历char[]s = ss.toCharArray();char[]p = pp.toCharArray();//创建hash1,统计pint[]hash1 = new int[26];for(char tmp:p){hash1[tmp-'a']++;}//创建hash2,用于统计sint[]hash2 = new int[26];//定义变量int count = 0;//记录有效字母个数for(int left = 0,right = 0;right<s.length;right++){//进窗口hash2[s[right]-'a']++;//维护有效字母个数if(hash2[s[right]-'a']<=hash1[s[right]-'a']) count++;//判断if(right-left+1>p.length){//出窗口//维护有效字母个数if(hash2[s[left]-'a']<=hash1[s[left]-'a']) count--;hash2[s[left]-'a']--;left++;}//更新结果if(count==p.length){list.add(left);}}return list;}
}

相关文章:

算法刷题:找到字符串中所有的字母异位词

找到字符串中所有的字母异位词 .题目链接题目详情题目解析算法原理滑动窗口流程图定义指针及变量进窗口判断出窗口更新结果 我的答案 . 题目链接 找到字符串中所有的字母异位词 题目详情 题目解析 所谓的异位词,就是一个单词中的字母,打乱顺序,重新排列得到的单词 如:abc-&g…...

【Java EE初阶十九】网络原理(四)

4. 数据链路层 数据链路层也有很多种协议&#xff0c;其中一个比较常见常用的,就是“以太网协议”&#xff08;通过网线/光纤, 来通信所使用的协议叫做以太网协议&#xff0c;以太网是横跨数据链路层 物理层&#xff09;&#xff1b; 4.1 以太网数据帧格式 帧头 载荷(IP 数据…...

12.23 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、社招&校招 | 轻舟智航 社招 & 2024校招 社招&校招 | 轻舟智航 社招 & 2024校招 2、校招 | 成都精灵云科技2024校园招聘补录 校招 | 成都精灵云科技2024校园招聘补录 …...

FPGA转行ISP的探索之一:行业概览

ISP的行业位置 最近看到一个分析&#xff0c;说FPGA的从业者将来转向ISP&#xff08;Image Signal Process图像信号处理&#xff09;是个不错的选择&#xff0c;可以适应智能汽车、AI等领域。故而我查了一下ISP&#xff0c;对它大致有个概念。 传统的ISP对应的是相机公司&…...

Linux系统之部署网页小游戏合集网站

Linux系统之部署网页游戏合集网站 一、项目介绍1.1 项目介绍1.2 自定义配置方法二、本次实践介绍2.1 环境规划2.2 本次实践介绍三、检查本地环境3.1 检查操作系统版本3.2 检查当前yum仓库四、安装httpd软件4.1 检查yum仓库4.2 安装httpd软件4.3 启动httpd服务4.4 查看httpd服务…...

【白嫖8k买的机构vip教程】python(2):python_re模块

python之re模块 一、正则表达式   re模块是python独有的匹配字符串的模块&#xff0c;该模块中提供的很多功能是基于正则表达式实现的&#xff0c;而正则表达式是对字符串进行模糊匹配&#xff0c;提取自己需要的字符串部分&#xff0c;他对所有的语言都通用。注意&#xf…...

【CSS】display:flex和display: inline-flex区别

flex&#xff1a;将对象作为弹性伸缩盒显示 inline-flex&#xff1a;将对象作为内联块级弹性伸缩盒显示 DOM结构 <div class"main"><div></div><div></div><div></div><div></div></div>flex .main{…...

rpm安装gitlab

1.1 下载gitlab安装包 使用rpm包安装命令安装gitlab的rpm包&#xff0c;下载地址为https://packages.gitlab.com/gitlab/gitlab-ce社区版本&#xff1b; 推荐使用清华大学镜像&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab安装包详见&#xff1…...

图论之dfs与bfs的练习

dfs--深度优选搜索 bfs--广度优先搜索 迷宫问题--dfs 问题&#xff1a; 给定一个n*m的二维迷宫数组其中S是起点&#xff0c;T是终点&#xff0c;*是墙壁&#xff08;无法通过&#xff09;&#xff0c; .是道路 问从起点S出发沿着上下左右四个方向走&#xff0c;能否走到T点&a…...

Vue练习5:图片的引入

后续会补充 1.require引入 src -> asstes <template><img :src"url"> </template><script> export default {name: App,data(){return{url: require("./assets/logo.png"),}} } </script> 2.import引入 src…...

SpringBoot+Kafka

文章目录 一、依赖二、配置文件三、API1、生产者2、消费者 一、依赖 <!-- spring-kafka&#xff08;与kafka的版本一致&#xff09; --> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>…...

世界顶级名校计算机专业,都在用哪些书当教材?(文末送书)

目录 01《深入理解计算机系统》02《算法导论》03《计算机程序的构造和解释》04《数据库系统概念》05《计算机组成与设计&#xff1a;硬件/软件接口》06《离散数学及其应用》07《组合数学》08《斯坦福算法博弈论二十讲》参与规则 清华、北大、MIT、CMU、斯坦福的学霸们在新学期里…...

蓝桥杯刷题--python-8(2023 填空题)

0幸运数 - 蓝桥云课 (lanqiao.cn) res=0 for i in range (1,100000000):l_n=[]for j in str(i):l_n.append(int(j))if len(l_n) % 2 ==0:cur =len(l_n)>>1if sum(l_n[:cur])==sum(l_n[cur:]):res+=1 print(res) 0有奖问答 - 蓝桥云课 (lanqiao.cn) dfs def bfs(score, q…...

Eclipse - Reset Perspective

Eclipse - Reset Perspective 1. Window -> Perspective -> Reset Perspective2. Reset Perspective -> YesReferences 1. Window -> Perspective -> Reset Perspective 2. Reset Perspective -> Yes ​​​ References [1] Yongqiang Cheng, https://yo…...

1.5v的电池电压低于多少v等于没电

对于1.5V的电池&#xff0c;电压低于一定值时就不再适合使用了。具体的电压值取决于电池的类型和使用设备的需求。一般来说&#xff0c; 对于接收设备&#xff08;如收音机、BB机、遥控机等&#xff09;&#xff0c;每节电池电压一般到1.2V以下就认为没电了。有些电动玩具、剃…...

LabVIEW智能监测系统

LabVIEW智能监测系统 设计与实现一个基于LabVIEW的智能监测系统&#xff0c;通过高效的数据采集和处理能力&#xff0c;提高监测精度和响应速度。系统通过集成传感器技术与虚拟仪器软件&#xff0c;实现对环境参数的实时监测与分析&#xff0c;进而优化监控过程&#xff0c;提…...

代码随想录刷题第34天

第一题是柠檬水找零https://leetcode.cn/problems/lemonade-change/&#xff0c;感觉并没有特别靠近贪心算法&#xff0c;可供讨论的情况非常少&#xff0c;5元收下&#xff0c;10元返5元&#xff0c;20元返15元&#xff0c;对各种找零情况讨论一下即可。 class Solution { pu…...

AMD FPGA设计优化宝典笔记(5)低频全局复位与高扇出

亚军老师的这本书《AMD FPGA设计优化宝典》&#xff0c;他主要讲了两个东西&#xff1a; 第一个东西是代码的良好风格&#xff1b; 第二个是设计收敛等的本质。 这个书的结构是一个总论&#xff0c;加上另外的9个优化&#xff0c;包含的有&#xff1a;时钟网络、组合逻辑、触发…...

14. Qt 程序菜单实现,基于QMainWindow

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 一、ui中直接添加控件实现 二、 完全通过代码实现菜单 参考&#xff1a; 前言&#xff1a; 基于QMainWindow&#xff0c;两种方式实现菜单&#xff1a;通过直接添加ui控件快速添加菜单和完全通过代码实现菜单&a…...

如何利用SpringSecurity进行认证与授权

目录 一、SpringSecurity简介 1.1 入门Demo 二、认证 ​编辑 2.1 SpringSecurity完整流程 2.2 认证流程详解 2.3 自定义认证实现 2.3.1 数据库校验用户 2.3.2 密码加密存储 2.3.3 登录接口实现 2.3.4 认证过滤器 2.3.5 退出登录 三、授权 3.1 权限系统作用 3.2 授…...

MorphoCopter:变形四旋翼无人机设计与控制技术

1. MorphoCopter&#xff1a;重新定义四旋翼无人机的形态与能力边界在无人机技术快速发展的今天&#xff0c;四旋翼飞行器已经成为从影视拍摄到灾害救援等多个领域的标配工具。然而&#xff0c;一个长期存在的硬件设计瓶颈始终未被突破——传统四旋翼的固定结构使其在需要通过狭…...

ICA与NMF算法详解:从盲源分离到矩阵分解的数学原理与工程实践

1. 项目概述&#xff1a;从数据噪音中“听”出独立的声音在信号处理、神经科学、金融数据分析等领域&#xff0c;我们常常会遇到一个经典的“鸡尾酒会问题”&#xff1a;在一个嘈杂的房间里&#xff0c;多个声源&#xff08;比如不同人的谈话、背景音乐&#xff09;的声音混合在…...

别只盯着UOS!龙芯电脑上还有这些国产Linux系统可以选:银河麒麟、Loongnix实测体验

龙芯平台国产操作系统全景评测&#xff1a;从银河麒麟到Loongnix的深度体验当谈到龙芯电脑的操作系统选择时&#xff0c;大多数用户的第一反应可能是统信UOS。然而&#xff0c;在这个国产芯片生态蓬勃发展的时代&#xff0c;我们其实拥有更多值得关注的选择。本文将带您深入探索…...

告别混乱:如何在不同Linux发行版(openEuler/Ubuntu)和Windows上彻底卸载AWS CLI v2

彻底卸载AWS CLI v2&#xff1a;跨平台深度清理指南当AWS CLI v2出现版本冲突、配置混乱或需要重新安装时&#xff0c;简单的删除操作往往无法彻底清除所有痕迹。本文将深入探讨如何在Windows、Ubuntu和openEuler系统上执行外科手术式卸载&#xff0c;确保不留任何残留文件。1.…...

Unity深度调试框架UniHacker:突破IL2CPP可观测性断层

1. 这不是“破解工具”&#xff0c;而是一套面向Unity开发者的深度调试与逆向协作框架“UniHacker”这个名字在社区里常被误读为某种一键解锁Asset Store资源或绕过License校验的黑盒程序——这恰恰是我们今天要彻底厘清的第一件事。它既不触碰Unity官方EULA中关于授权使用的核…...

【Claude教育内容创作黄金法则】:20年教育技术专家亲授5大不可复制的AI协同写作心法

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Claude教育内容创作的范式革命 传统教育内容生产长期受限于人力密集、周期冗长与个性化不足三大瓶颈。Claude凭借其长上下文理解、结构化输出能力与教育领域微调优势&#xff0c;正推动一场从“经验驱动”到“…...

Redis分布式锁进阶第五十六篇

Redis分布式锁进阶第二十五篇&#xff1a;联锁深度拆解 多资源交叉死锁根治 复杂业务多级加锁绝对有序方案一、本篇前置衔接 第二十四篇我们完成了全系列终局复盘&#xff0c;整理了故障排查SOP与企业级落地铁律。常规单资源锁、热点分片锁、隔离锁全部讲透&#xff0c;但真实…...

WSL2 2023史诗级更新实测:你的.wslconfig文件真的配对了吗?(从版本检查到稀疏VHD全流程)

WSL2 2023史诗级更新实战&#xff1a;从版本适配到性能调优全解析如果你最近尝试在WSL2中配置网络功能时遇到各种"玄学问题"&#xff0c;比如代理失效、端口转发异常或是磁盘空间莫名被占满&#xff0c;很可能是因为忽略了版本兼容性这个关键前提。2023年9月后&#…...

AI安全实战:生成式AI安全防御的实战技巧

AI安全实战&#xff1a;生成式AI安全防御的实战技巧&#x1f4dd; 本章学习目标&#xff1a;本章聚焦实战应用&#xff0c;通过案例帮助读者将理论转化为实践能力。通过本章学习&#xff0c;你将全面掌握"AI安全实战&#xff1a;生成式AI安全防御的实战技巧"这一核心…...

告别眨眼误判!用Python+OpenCV优化人脸68关键点疲劳检测的3个实用技巧

告别眨眼误判&#xff01;用PythonOpenCV优化人脸68关键点疲劳检测的3个实用技巧在计算机视觉应用中&#xff0c;人脸关键点检测一直是热门研究方向。特别是68关键点检测技术&#xff0c;因其在表情识别、疲劳监测等场景中的实用性而备受关注。然而&#xff0c;许多开发者在实际…...