当前位置: 首页 > 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 授…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...