每天一道算法题(九)——寻找字符串中所有字母异位词的子串

文章目录

  • 前言
  • 1、问题
  • 2、示例
  • 3、解决方法
    • (1)方法1——双指针
  • 总结


前言

提示:


1、问题

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

2、示例

示例 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” 的异位词。

3、解决方法

(1)方法1——双指针

let s = "cbaebabacd", p = "abc"
var findAnagrams = function(s, p) {// 1-1: 定义左右指针,注意右指针和传入字符串p的长度相等let left = 0; right = p.length; // 找到异味的子串长度要和p的长度一样let arr = []; // 1-2 :定义返回的数组 let temp =''; // 1-3:接收根据左右指针切割后的字符串// 2: 判断右指针是否小于等于s字符串的长度(注意点:小于等于,因为右指针最大是会为s字符串长度的,否则如示例2只会返回[0,1])while(right <= s.length){// 3:总体就是把切割后的字符串进行排序,就是排序过程是变成数组排序后变为字符串较为复杂,可以优化temp = s.slice(left, right) // 3-1: 获取根据左右指针切割的字符串let tempArray = temp.split(''); // 3-2 将切割的字符串变成数组tempArray.sort(); // 3-3: 将切割和p一样长度的子串排序temp = tempArray.join(''); // 3-4 将排序后的数组变为字符串// 4: 如果排序后的字符串和p相等,即符合条件,将开始下标插入到数组中if(temp == p){arr.push(left); // 如果切割的子串和p相等,添加p的下标}// 5: 由于切割的子串长度固定(p的长度),所以左右指针的长度同步增加left++;right++;}console.log('arr', arr); // 6: 返回结果的数组
};
findAnagrams(s, p)

总结

(1)难度: 中等
(2)注意点:右指针的长度要 小于等于 s字符串的长度,不然如示例2中的效果就是[0,1],会少个下标为2的效果。
(3)其他:由于和每天一道算法题(八)——找出字符串中无重复字符的最长子串这题的思路一样,15分钟就写出来了,一样的思路,感觉为贼强,哈哈哈。。。

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

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

相关文章

推荐一个windows上传linux服务器/linux服务器的docker镜像的工具,摆脱docker cp,以及解决常见问题。

Lrzsz&#xff0c;又称为lrz和lsz&#xff0c;是一个用于在Unix、Linux、macOS等操作系统上进行串行文件传输的工具。它支持基于X/Y/ZModem协议的文件传输&#xff0c;能够通过串口或者Telnet/SSH等网络连接进行文件传输。Lrzsz具有传输速度快、可靠性高、易于使用等特点&#…

详解ES6的Promise

ES6&#xff08;ECMAScript 6&#xff09;是JavaScript的一种标准&#xff0c;也被称为ES2015。它是在2015年发布的第六个ECMAScript标准版本&#xff0c;引入了许多新的语法和特性来增强JavaScript的功能和可读性。 文章目录 一、创建promise 二、处理Promise 三.Promise链…

OpenCV入门9——目标识别(车辆统计)

文章目录 图像轮廓查找轮廓绘制轮廓轮廓的面积与周长多边形逼近与凸包外接矩形项目总览【车辆统计】视频加载【车辆统计】去背景【车辆统计】形态学处理【车辆统计】逻辑处理【车辆统计】显示信息【车辆统计】 图像轮廓 查找轮廓 # -*- coding: utf-8 -*- import cv2 import n…

return关键字

return 是编程语言中的一个关键字&#xff0c;用于结束当前函数或方法的执行&#xff0c;并返回一个值&#xff08;如果函数有返回值的话&#xff09;。return 的作用是将程序的控制权从当前的函数或方法返回给调用方&#xff0c;并且返回一个指定的值。 在函数中的作用&#…

vue3的api使用

vue官网链接 API 全览图 createApp() // 内敛根组建import { createApp } from vueconst app createApp({})// 导入根组建import App from ./App.vueconst app createApp(App)app.mount() import { createApp } from vue const app createApp() const vm app.mount(#app…

Threejs_09 gltf模型的引入(效果初现)

本节使用到的图片、素材、gltf文件&#xff0c;都是老陈打码的原素材 支持&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#x…

口罩问题

描述 两年前的今天&#xff0c;疫情肆虐武汉&#xff0c;曾经几毛钱的一个一次性医用口罩供不应求&#xff0c;价格也是水涨船高&#xff0c;更有甚者一只口罩卖到了10元。在利益的驱使下也让一些不良商家道德涣散&#xff0c;据相关报道&#xff0c;有商家回收废弃口罩并重新…

C++:重载

运算符重载本质上就是函数重载。这里举例子是定义三维数组。下面代码是进行简单的定义&#xff0c;输出分别是000和123。 #include<iostream> using namespace std; class Vec3 { public:Vec3() :r(0), g(0), b(0){}Vec3(int _r, int _g, int _b):r(_r),g(_g),b(_b){} p…

SQL DELETE 语句:删除表中记录的语法和示例,以及 SQL SELECT TOP、LIMIT、FETCH FIRST 或 ROWNUM 子句的使用

SQL DELETE 语句 SQL DELETE 语句用于删除表中的现有记录。 DELETE 语法 DELETE FROM 表名 WHERE 条件;注意&#xff1a;在删除表中的记录时要小心&#xff01;请注意DELETE语句中的WHERE子句。WHERE子句指定应删除哪些记录。如果省略WHERE子句&#xff0c;将会删除表中的所…

ANSYS中如何手动为装配体添加接触约束教程

接触的类型&#xff1a; 在接触类型&#xff08;Type&#xff09;选项中&#xff0c;软件共提供了绑定接触&#xff08;Bonded&#xff09;、不分离接触&#xff08;No Separation&#xff09;、无摩擦接触&#xff08;Frictionless&#xff09;、粗糙接触&#xff08;Rough&a…

深入Ansible

1.什么是ansible ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible是基于 paramiko 开发的…

如何使用GitHub托管代码(简易版)

打开IDEA并打开你的项目。 确保你已经安装了Git&#xff0c;并且在你的计算机上设置了Git的全局用户信息&#xff08;用户名和电子邮箱地址&#xff09;。这里设置用户签名和将来登录 GitHub&#xff08;或其他代码托管中心&#xff09;的账号没有任何关系。Git 首次安装必须设…

Linux操作系统使用及C高级编程-D11-D13结构体

由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”&#xff0c;其描述了一块内存空间的大小及解释意义。 语法&#xff1a; struct 结构体名 { 结构体成员列表 }; 下图是struct的定义和使用方法&#xff0c;其中20行这种赋值方式错误&#xf…

向pycdc项目提的一个pr

向pycdc项目提的一个pr 前言 pycdc这个项目&#xff0c;我之前一直有在关注&#xff0c;之前使用他反编译python3.10项目&#xff0c;之前使用的 uncompyle6无法反编译pyhton3.10生成的pyc文件&#xff0c;但是pycdc可以&#xff0c;但是反编译效果感觉不如uncompyle6。但是版…

BGP笔记

自治系统----AS AS划分的原因&#xff1a;如果网络太大&#xff0c;路由数量进一步增加&#xff0c;路由表规模变得太大&#xff0c;会导致路由收敛速度变慢&#xff0c;设备性能消耗加大&#xff0c;且全网设备对于路由信息的认知不同&#xff0c;造成流量通讯障碍 AS号&…

Shader的组成部分Fallback

文档 Fallback 作用 SubShader都不起作用的时候&#xff0c;使用Fallback确保有备有的shader起作用 语法 Fallback "Shader名字” 不使用备用shader Fabllback Off

快慢指针思想(Hare Tortoise 算法)

目录​​​​​​​ 一、快慢指针概念 二、常用场景 2.1 寻找倒数第k个节点 2.2 判断回文链表 2.3 用于判断链表中是否存在 “环” 2.4 用于判断存在“环”的链表中&#xff0c;“环”的起始位置 一、快慢指针概念 快慢指针是一种常用的数据结构思想&#xff0c;主要用于…

Django批量插入数据及分页器

文章目录 一、批量插入数据二、分页1.分页器的思路2.用一个案例试试3.自定义分页器 一、批量插入数据 当我们需要大批量创建数据的时候&#xff0c;如果一条一条的去创建或许需要猴年马月 我们可以先试一试for循环试试 我们首先建立一个模型类来创建一个表 models.py&#xff…

腾讯云代金券怎么领取(腾讯云代金券在哪领取)

腾讯云代金券是可抵扣费用的优惠券&#xff0c;领券之后新购、续费、升级腾讯云相关云产品可以直接抵扣订单金额&#xff0c;节省购买腾讯云的费用&#xff0c;本文将详细介绍腾讯云代金券的领取方法和使用教程。 一、腾讯云代金券领取 1、新用户代金券【点此领取】 2、老用户…