力扣每日一题:438. 找到字符串中所有字母异位词

LeetCode 438. 找到字符串中所有字母异位词(python) 题目链接 题目描述: 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。 说明: 字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。 示例 1: 输入: s: “cbaebabacd” p: “abc” 输出: [0, 6] 解释: 起始索引等... 阅读详情

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

https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/

题目:

给定一个字符串s和一个非空字符串p,找到s中所有是p的字母异位词的子串,返回这些子串的起始索引。

字符串只包含小写英文字母,并且字符串s和 p的长度都不超过 20100。

说明:

字母异位词指字母相同,但排列不同的字符串。
不考虑答案输出的顺序。

示例:

示例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" 的字母异位词。

分析:

如果做过类似题目,会第一时间想到双指针+字典的方式进行顺序比较。

  1. 维护一个ascii_lowercase为key的全零字典
  2. 根据p生成待匹配的字典信息dict_p
  3. 同理创建针对s的ascii_lowercase为key的全零字典
  4. 创建双指针,right从s[0]出发每次添加至tmp字典
  5. 当左右指针差距小于len(p)时,left指针不动
  6. 当左右指针差距等于len(p)时开始正式的对比操作,并每次匹配后left+=1
  7. 如果tmp等于dict_p,则将left指针添加入ret。
  8. 如果不匹配,删除掉左指针对应的字母。
  9. right+=1
  10. 当right指针走至s末尾结束判断。

解题:

from string import ascii_lowercase


class Solution:
    def findAnagrams(self, s, p):
        ret = []
        k_dict = {}.fromkeys(ascii_lowercase, 0)
        for i in p:
            k_dict[i] += 1
        tmp = {}.fromkeys(ascii_lowercase, 0)
        left = right = 0
        while right < len(s):
            tmp[s[right]] += 1
            if tmp == k_dict:
                ret.append(left)
            if right - left + 1 == len(p):
                tmp[s[left]] -= 1
                left += 1
            right += 1
        return ret

欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。

有喜欢力扣刷题的小伙伴可以加我微信(King_Uranus)互相鼓励,共同进步,一起玩转超级码力!

我的个人博客:https://qingfengpython.cn

力扣解题合集:https://github.com/BreezePython/AlgorithmMarkdown

【力扣每日一题】438. 找到字符串中所有字母异位词 双指针+滑动窗口双解法 原题地址:438. 找到字符串中所有字母异位词 本来博主以为对双指针等模板题已经滚瓜烂熟了并且打算从此以后不再写算法博客的,今天做到这个题看到双指针解法我直呼妙!在纸上写了半天终于想明白那一瞬间的开心终于把前几天口红掉进厕所的悲伤覆盖了hhh。 题意倒是不难。 这里用双指针能很巧妙地还原count的状态。 其实也算是双指针的模板题555因为双指针真的用得不难,我以后再也不说我对模板题滚瓜烂熟了(果然板子还是不能硬背) 双指针解法 class Solution { public: vector&lt 阅读详情

相关推荐

从零构建:Esp32+Esp-IDF驱动ST7789屏幕并集成LVGL图形库

本文详细介绍了如何从零开始使用Esp32和Esp-IDF驱动ST7789屏幕并集成LVGL图形库。内容涵盖环境准备、SPI驱动配置、屏幕初始化、LVGL图形库集成及常见问题排查,帮助开发者快速实现高效稳定的显示解决方案。

weixin_42657024的博客 526

leetcode之Find All Anagrams in a String(438)

题目: 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。 说明: 字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。 示例 1: 输入: s: "cbaebabacd" p: "abc" 输出: [0, 6] 解释: 起始索...

cuicheng01的博客 412

各种加法器的比对分析与Verilog实现(3)

了Kogge-Stone加法器和brent-kung加法器,本文将用Verilog代码进行实现。

Albert_yeager的博客 1199

LeetCode 热题 HOT 100 第八十三天 438. 找到字符串中所有字母异位词 用python3求解

解法:滑动窗口

weixin_40634691的博客 388

Springboot项目中使用邮箱验证码注册登录的代码实现

本文介绍了在Spring Boot应用中实现邮箱验证码注册和登录功能的完整方案。文章首先概述了三种用户认证方式(邮箱验证码注册/登录和传统密码登录),然后详细说明了实现所需的技术栈(Spring Boot、Spring Security、JWT等)。重点阐述了邮件服务配置、验证码生成与存储的核心实现,包括QQ邮箱授权码获取、Thymeleaf邮件模板处理以及验证码缓存管理。最后展示了发送验证码和用户注册的API实现,为开发者提供了完整的参考方案。该方案兼顾安全性和用户体验,适合现代Web应用的用户认证需求。

BXCQ_xuan的技术专栏 | 实战干货·实践教程·学习笔记 1341

霍尔电流传感器在新能源汽车中的应用综述

本文旨在全面剖析霍尔电流传感器在新能源汽车领域的应用现状、技术挑战及发展趋势。通过系统梳理其在电池管理系统、电机控制、车载充电等核心系统的应用场景,深入分析面临的技术瓶颈与创新解决方案,并基于最新技术动向展望未来发展方向,为相关领域的技术创新提供参考依据。

m0_46819860的博客 2260

Python算法题集_找到字符串中所有字母异位词

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

长孤秋落的札记 1255

LSTM在交通流量预测中的应用:优化城市交通管理

我们使用的数据集来自某个城市的交通监测系统,包含多个监测点在不同时间段内的交通流量记录。每个监测点的数据包括时间戳、交通流量、天气状况和道路状态等信息。

斌擎科技 1259

leetcode 438. 找到字符串中所有字母异位词 python

题目描述: 题解: 1.从s的第一个位置开始,每次取s的片段s[i:i+len(p)] 2.将s[i:i+len(p)]按照字母表顺序排序,如果和p按照字母表顺序排列结果相同,则将i加入记录最终子串开始索引的poslist中。 class Solution(object): def findAnagrams(self, s, p): lenp = len(p) poslist = [] p_sorted = sorted(p) .

ganggang的博客 384

2026年复旦微电数字IC笔试试卷带答案解析

摘要: 本文为复旦微电子MCU/SOC岗位笔试模拟题,涵盖单片机架构、数字电路、存储技术等核心知识点。内容包括: 单选题(30分):考察Cortex-M中断机制、时序分析(建立/保持时间)、逻辑化简、跨时钟域设计(格雷码应用)、存储器特性(NAND Flash操作单元)等; 波形分析(15分):聚焦D触发器行为、时钟分频、建立时间违例判断及跨时钟域同步; 多选题(25分):涉及亚稳态成因与处理、异步FIFO设计要点、MCU低功耗策略、NAND Flash特性及复旦微电市场地位; 简答题(20分):解析建立/

Open 344

Uncaught ReferenceError: process is not defined

这个错误 Uncaught ReferenceError: process is not defined 通常出现在浏览器环境中,因为 process 是 Node.js 环境的内置对象,并不是浏览器原生支持的。因此,浏览器无法识别 process,导致该错误。在App.vue中加上以下代码就能够有效解决。

猿小白的博客 1744

C++ 力扣 438.找到字符串中所有字母异位词 题解 优选算法 滑动窗口 每日一题

本文围绕LeetCode 438题“找到字符串中所有字母异位词”展开解析。该题是滑动窗口在字符串匹配场景的经典应用,核心是寻找s中所有为p的字母异位词的子串起始索引。 文章先拆解题目,明确“子串长度与p相同、字符频率完全一致”的关键约束。接着对比暴力解法的低效,引出固定滑动窗口思路:用数组统计p和窗口字符频率,通过动态更新窗口边界字符频率,结合count变量快速判断匹配。 还详解代码实现细节,总结常见坑点,并对比同类题目滑动窗口应用差异,为后续类似问题提供解题思路。

Q741_147的博客 1176

uni-app - 修改默认端口,H5 项目控制台运行出来的 IP 地址的默认端口号(H5 项目运行后控制台,修改项目运行到内置浏览器默认 8080 端口号)

uni-app运行到H5修改默认端口号,uni-app如何修改默认端口,uni-app修改默认端口,uni-app本地运行修改调试已上线微信H5项目,请问在UNIAPP的H5运行调试时候的IP是否可以自己设置固定,uni-app开发环境,如何设置h5服务器的端口,uni-app如何修改默认端,uni-app修改默认端口,uni-app指定端口号,uni-app-修改H5项目控制台运行出来的IP地址的默认端口号(H5项目运行后控制台,修改项目运行到内置浏览器默认8080端口号)

🏆 前端领域优质创作者 9887

LeetCode hot 100 每日一题(8)——438. 找到字符串中所有字母异位词

这是滑动窗口的另一道题目,难度为中等。让我们来看看题目描述:给定两个字符串s和p,找到s中所有p的的子串,返回这些子串的起始索引。不考虑答案输出的顺序。[0,6]起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。[0,1,2]起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。

m0_46464899的博客 1118

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【LeetCode每日一题】438. 找到字符串中所有字母异位词

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

2301_80103998的博客 493

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LeetCode438. 找到字符串中所有字母异位词(2024秋季每日一题 11)

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。输入: s = “abab”, p = “ab”输出: [0,1,2]

多思考🤔~ 1134

【算法】Leetcode438. 找到字符串中所有字母异位词(每日一题)

438. 找到字符串中所有字母异位词 难度中等702收藏分享切换为英文接收动态反馈 给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词指由相同字母重排列形成的字符串(包括相同的字符串)。 示例1: 输入: s = "cbaebabacd", p = "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。 起始索引等于 6 的子串是 "bac", 它是 "abc...

m0_57099044的博客 604

每日一练:找到字符串中所有字母异位词

给定两个字符串s和p,找到s中所有p的的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指由相同字母重排列形成的字符串(包括相同的字符串)。[0,6]起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。[0,1,2]起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。

2303_78095330的博客 388

​LeetCode刷题实战438:找到字符串中所有字母异位词

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !...

程序IT圈 213

每日一题,力扣leetcode Hot100之438. 找到字符串中所有字母异位词

暴力解法,遍历,每次移动目标字符串的长度,将框出来的排序后字符串和排序后目标字符串进行比较,如果相等则保存其id,但是时间复杂度较高,差点超时。记录p字符串的字母频次p_cnt,和s字符串前m个字母频次s_cnt。判断p_cnt和s_cnt是否相等,相等则在返回值res中新增异位词索引 i - m + 1。继续遍历s字符串索引为[m, n)的字母,在s_cnt中每次增加一个新字母,去除一个旧字母。因为字符串中的字符全是小写字母,可以用长度为26的数组记录字母出现的次数。

u013373155的博客 517

《LeetCode 热题 100》每日一题

力扣最受刷题发烧友欢迎的 100 道题

m0_68788727的博客 1160

每日练习——leetcode438和203

leetcode438.找到字符串中所有字母异位词 leetcode203.移除链表元素

2401_83138160的博客 934

Leetcode—438. 找到字符串中所有字母异位词【中等】

运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

Atticus的博客 243

【每日一题】LeetCode 438. 找到字符串中所有字母异位词 TypeScript

2.一个数组存放是模板子串,另一个是滑动的窗口,每移动一位就和模板子串做比较是否相等。1.建立两个数组,26的长度,索引分别对应26个字母,值对应的是每个字母出现的个数。起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。

qq_69682052的博客 199

学习Java第六十二天——Hot 100-09-438. 找到字符串中所有字母异位词

本文讨论了LeetCode 438题"找到字符串中所有字母异位词"的解题思路。首先介绍了两种基础方法:排序法(比较排序后的子串)和哈希表法(统计字母频率)。重点分析了滑动窗口优化技巧,指出其优势在于只需调整窗口两端元素而非重新遍历整个子串。文中引用了灵神的代码示例,展示了如何通过维护字母频率数组来高效比较异位词。最后分享了评论区的优化思路,包括剪枝策略和动态维护目标串特征的方法,将时间复杂度优化至O(n)。

博主是26届应届生,大三以前的专业课也没有好好学,眼下马上面临秋招,日益焦虑,遂记录每日Java后端学习进度,共勉。 426

【Leetcode每日一题】滑动窗口 - 找到字符串中所有字母异位词(14)(难度⭐⭐)

滑动窗口 - 找到字符串中所有字母异位词(14)

m0_73150338的博客 265
上一篇: 力扣每日一题:71. 简化路径 一个现实场景的运维题目
下一篇: 力扣双周赛49(2021-04-03)解题分享
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值