【算法笔记】力扣热题100(LeetCode hot-100)438. 找到字符串中所有字母异位词 滑动窗口

力扣热题100(LeetCode hot-100)之 438. 找到字符串中所有字母异位词

本文主要记录算法思路,着急要答案的同学可以直接跳转到最后的代码。

题目

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 :字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。两个字符串的字符相同,但排列不同的字符串。示例 1:
输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。示例 2:
输入: s = "abab", p = "ab"
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。
起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。

题解

求什么?

我们需要找到字符串 s 中所有是 p 的字母异位词的子串,并返回这些子串的起始索引。
异位词换句话说就是:两个字符串的字符相同,但排列顺序不一定相同的字符串。

这个问题,一般怎么解?

思路:

一般来说,我们可以使用滑动窗口(Sliding Window)的方法来解决这个问题。
滑动窗口就是指定一个大小作为窗口,然后在字符串上滑动这个窗口,找到符合条件的子串。

  1. 定义两个数组 sWinFlag 和 pFlag,分别记录窗口中和 p 中各个字符的数量。
  2. 初始化窗口,统计第一个窗口中各个字符的数量。
  3. 滑动窗口,更新窗口中各个字符的数量。
  4. 如果窗口中的字符数量和 p 中的字符数量一样,说明是异位词,记录起始索引

答案

class Solution {public List<Integer> findAnagrams(String s, String p) {int sLen = s.length();int pLen = p.length();// 如果s的长度小于p的长度,直接返回空列表if (sLen < pLen) {return Collections.emptyList();}int[] sWinFlag = new int[26]; // 用于记录窗口中各个字符的数量int[] pFlag = new int[26]; // 用于记录p中各个字符的数量for (int i = 0; i < pLen; i++) {sWinFlag[s.charAt(i) - 'a']++;pFlag[p.charAt(i) - 'a']++;}List<Integer> res = new ArrayList<>();if (Arrays.equals(sWinFlag, pFlag)) { // 单独处理第一个窗口res.add(0);}// 滑动窗口for (int left = 0, right = pLen; right < sLen; left++, right++) {sWinFlag[s.charAt(left) - 'a']--;sWinFlag[s.charAt(right) - 'a']++;// 如果窗口中的字符数量和p中的字符数量一样,说明是异位词if (Arrays.equals(sWinFlag, pFlag)) {res.add(left + 1);}}return res;}
}

在这里插入图片描述

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

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

相关文章

【Python】深入探讨Python中的单例模式:元类与装饰器实现方式分析与代码示例

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门&#xff01; 解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 单例模式&#xff08;Singleton Pattern&#xff09;是一种常见的设计模式&#xff0c;它确保一个类只有一个实例&…

Hadoop•搭建完全分布式集群

听说这里是目录哦 一、安装Hadoop&#x1f955;二、配置Hadoop系统环境变量&#x1f96e;三、验证Hadoop系统环境变量是否配置成功&#x1f9c1;四、修改Hadoop配置文件&#x1f36d;五、分发Hadoop安装目录&#x1f9cb;六、分发系统环境变量文件&#x1f368;七、格式化HDFS文…

【机器人学】2-3.六自由度机器人运动学逆解-工业机器人【附MATLAB代码】

解析解推导 假设有一工业机器人参数如下图所示&#xff1a; matlab代码 clc;clear; %带入机器人初始值 d1 0.670; d4 1.280; d6 0.215;a2 0.312; a3 1.075; a4 0.225;Position[288.1, -433.1, 2832,96.9158, -29.6162, 109.3547]; px Position(1)/1000; py Positio…

ARM学习(42)CortexM3/M4 MPU配置

笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…

HTML语言的数据结构

HTML语言的数据结构 引言 HTML&#xff08;超文本标记语言&#xff09;是构建网页的标准语言。尽管HTML本身不是一种编程语言&#xff0c;它为我们提供了一种结构化的信息表示方法&#xff0c;使得网页内容能够有序地展现给用户。HTML的核心在于其标记&#xff08;标签&#…

PIC单片机HEX文件格式分析

在调试PIC单片机在bootloader程序时&#xff0c;需要将hex文件转换为bin文件&#xff0c;在转换之前先了解一下hex文件中数据是如何定义的。 直接打开一个LED灯闪烁的程序生成的hex文件&#xff0c;芯片型号为PIC18F46K80 可以看到每条数据都是由6部分组成的&#xff0c;下面分…

利用Kubespray安装生产环境的k8s集群-实施篇

如何安装生产环境下的高可用k8s集群 接上篇 规划k8s集群 本次我预备了6台VMs&#xff0c; 1台作为Jump server&#xff0c;用来部署Ansible并负责在其他5台设备上部署k8s。这台服务器后续可能还要做nfs server。 3台做master&#xff0c;为了给etcd做高可用。&#xff08;Et…

SQL中字符串截取函数(substring)

1.left&#xff08;name&#xff0c;4&#xff09;截取左边的四个字符 案例 select left(20240428,4) 结果 2024 2.right&#xff08;name&#xff0c;2&#xff09;截取右边的2个字符 案例 select right(20240428,2) 结果 28 3.substring(name,5,3)截取name这个字段从第五个字…

用户中心项目教程(四)---Vue脚手架完成前端初始化

目录 1.项目的创建 2.使用开发工具打开 3.项目运行方法 4.使用按钮组件 5.全局注册 6.如何进行组件的测试 7.使用组件的效果展示 8.关于这个vue项目内容的说明 1.项目的创建 这个前提你是你完成了我的教程&#xff08;三&#xff09;里面的相关配置&#xff0c;不然你可…

【GitHub】登录时的2FA验证

一、如何进行2FA认证 1.在你的浏览器中下载 Authenticator身份验证插件 2.使用身份验证器添加凭证 2.1 使用身份验证器扫描验证二维码 选择扫描二维码

目标跟踪算法发展简史

单目标跟踪&#xff08;Single Object Tracking&#xff0c;SOT&#xff09;是计算机视觉领域中的一个重要研究方向&#xff0c;旨在在视频序列中持续定位并跟踪一个特定目标。随着计算机视觉和机器学习技术的飞速发展&#xff0c;单目标跟踪算法经历了从经典方法到深度学习的演…

Flink 使用 Kafka 作为数据源时遇到了偏移量提交失败的问题

具体的错误日志 21:43:57.069 [Kafka Fetcher for Source: Custom Source -> Map -> Filter (1/1)#2] ERROR org.apache.kafka.clients.consumer.internals.ConsumerCoordinator - [Consumer clientIdconsumer-my-group-6, groupIdmy-group] Offset commit failed on pa…

【Java设计模式-7】责任链模式:我是流水线的一员

一、责任链&#xff08;Chain of Responsibility Patten&#xff09;模式是个啥&#xff1f; 想象一下&#xff0c;你要请假。你先把请假申请交给了小组长&#xff0c;小组长一看&#xff0c;这事儿他能决定&#xff0c;就直接批了。要是小组长觉得这事儿得往上汇报&#xff0…

面试-字符串1

应用 第1个字符串&#xff1a;R 第2个字符串&#xff1a;BR 第3个字符串&#xff1a;RBBR 第4个字符串&#xff1a;BRRBRBBR 规律&#xff1a;第i个字符串 第i-1个字符串取反 第i-1个字符串&#xff0c;其中B、R互为相反字符。求第n个字符串的第k个字符为多少&#xff1f;n从…

C# 通用缓存类开发:开启高效编程之门

引言 嘿&#xff0c;各位 C# 开发者们&#xff01;在当今快节奏的软件开发领域&#xff0c;提升应用程序的性能就如同给跑车装上涡轮增压&#xff0c;能让你的项目在激烈的竞争中脱颖而出。而构建一个高效的 C# 通用缓存类&#xff0c;无疑是实现这一目标的强大武器。 想象一…

QT调用OpenSceneGraph

OSG和osgQt编译教程&#xff0c;实测通过 一、下载OpenSceneGraph OpenSceneGraphhttps://github.com/openscenegraph/OpenSceneGraph 二、使用CMAKE编译OpenSceneGraph 1.打开cmake&#xff0c;配置源代码目录 2. CMAKE_INSTALL_PREFIX设置为install文件夹&#xff0c;生…

人工智能领域单词:英文解释

目录 1、前言2、单词组1&#xff1a;15个3、单词组2&#xff1a;15个4、单词组3&#xff1a;15个5、单词组4&#xff1a;15个6、单词组5&#xff1a;15个 1、前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加关注哦&#xff0…

数据结构与算法面试专题——引入及归并排序

数据结构与算法引入 我们都知道数据结构与算法很重要&#xff0c;甚至会将其称为程序员的“内功”&#xff0c;但是我们花了很多时间学的算法和数据结构&#xff0c;好像就只是为了应对算法面试&#xff0c;对日常的开发工作没有什么帮助。 这点对于我们数据工程师来说&#…

《鸿蒙 HarmonyOS 应用开发从入门到精通(第 2 版)》学习笔记 ——HarmonyOS 环境搭建之安装DevEco Studio

作为一款开发工具&#xff0c;除了具有基本的代码开发、编译构建及调测等功能外&#xff0c;DevEco Studio还具有如下特点&#xff1a; 高效智能代码编辑&#xff1a;支持Java、XML、ArkTS、JS、C/C等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、…

电脑办公技巧之如何在 Word 文档中添加文字或图片水印

Microsoft Word是全球最广泛使用的文字处理软件之一&#xff0c;它为用户提供了丰富的编辑功能来美化和保护文档。其中&#xff0c;“水印”是一种特别有用的功能&#xff0c;它可以用于标识文档状态&#xff08;如“草稿”或“机密”&#xff09;、公司标志或是版权信息等。本…