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

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

题目来源:

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


题目内容:

给定两个字符串 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" 的异位词。

提示:

  • 1 <= s.length, p.length <= 3 * 104

  • s 和 p 仅包含小写字母


思路分析:

  • 思路一:不定长滑窗   来源:灵茶山艾府

    枚举子串s′的右端点,如果发现s′其中一种字母的出现次数大于 p的这种字母的出现次数,则右移s′的左端点。如果发现s′的长度等于p的长度,则说明s′的每种字母的出现次数,和p的每种字母的出现次数都相同,那么s′是p的异位词。


代码实现(版本一:灵神(附带注释)):

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ans;int cnt[26];//记录p中每种字母出现的次数,,这里我觉得也可以使用哈希表实现for(char c:p) cnt[c-'a']++;int left =0;for(int right=0;right<s.size();right++){int  c=s[right]-'a';cnt[c]--;while(cnt[c]<0){//是循环  字母c太多了cnt[s[left]-'a']++;//左端点向后移动left++;}if(right-left+1==p.length()){//经过上面while循环s‘和p的每种字符出现次数都相同ans.push_back(left);}}return ans;}
};

代码实现(版本二:int数组ant 替换成哈希表):

我再想想


题目心得:

  1. 体会题目解法的精妙思想:
    滑动窗口是怎么实现的?/为什么要用滑动窗口?

  2. 比较滑动窗口和双指针算法的区别

  3. int/char  c=s[right]-'a';  //这里的c两种类型都可以运行

  4. 最近在读一本书《刻意练习》
    作者在通过举例的方式想向我们传达一种思想:

  • 一些国际象棋大师,之所以厉害是因为,他们的脑袋里存储了上万个残局模型,在比赛/下棋过程中,针对不通的情况,进行调用/做出改善

  • 我觉得我们学习算法的过程亦是如此,先针对基础的算法进行学习,在头脑中积累算法模板,最后遇到题目/实际问题,进行合适的调用并输出

  • 说了这么多。就是想表达。有时候不用太纠结。不会了就看看答案(但一定要自己敲一遍)。多记忆一些。下次才会有思路。

相关文章:

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

题目来源&#xff1a; 438. 找到字符串中所有字母异位词 - 力扣&#xff08;LeetCode&#xff09; 题目内容&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s &…...

c++标准io与线程,互斥锁

封装一个 File 类&#xff0c; 用有私有成员 File* fp 实现以下功能 File f "文件名" 要求打开该文件 f.write(string str) 要求将str数据写入文件中 string str f.read(int size) 从文件中读取最多size个字节&#xff0c; 并将读取到的数据返回 析构函数 #…...

java简单实现请求deepseek

1.deepseek的api创建 deepseek官网链接 点击右上API开放平台后找到API keys 创建APIkey&#xff1a; 注意&#xff1a;创建好的apikey只能在创建时可以复制&#xff0c;要保存好 2.java实现请求deepseek 使用springbootmaven 2.1 pom文件&#xff1a; <?xml version&…...

Ext系列文件系统 -- 磁盘结构,磁盘分区,inode,ext文件系统,软硬链接

目录 1.理解硬盘 1.1 磁盘、服务器、机柜、机房 1.2 磁盘物理结构 1.3 磁盘的存储结构 1.4 磁盘的逻辑结构 1.4.1 理解逻辑结构 1.4.2 真实过程 1.5 CHS地址和LBA地址的相互转换 2.引入文件系统 2.1 “块”概念 2.2 “分区”概念 2.3 “inode”概念 3.ext2文件系…...

PyTorch Tensor 形状变化操作详解

PyTorch Tensor 形状变化操作详解 在深度学习中&#xff0c;Tensor 的形状变换是非常常见的操作。PyTorch 提供了丰富的 API 来帮助我们调整 Tensor 的形状&#xff0c;以满足模型输入、计算或数据处理的需求。本文将详细介绍 PyTorch 中常见的 Tensor 形状变换操作&#xff0…...

文字识别软件cnocr学习笔记

• 安装 pip install cnocr • 基础的使用方法 首次运行会下载安装模型&#xff0c;如果没有梯子&#xff0c;会报错&#xff1a; 在网络上查找cnocr的模型资源&#xff0c;并下载到本地。https://download.csdn.net/download/qq_33464428/89514689?ops_request_misc%257B%2…...

本地部署DeepSeek R1 + 界面可视化open-webui【ollama容器+open-webui容器】

本地部署DeepSeek R1 界面可视化open-webui 本文主要讲述如何用ollama镜像和open-webui镜像部署DeepSeek R1&#xff0c; 镜像比较方便我们在各个机器之间快速部署。 显卡推荐 模型版本CPU内存GPU显卡推荐1.5B4核8GB非必需4GBRTX1650、RTX20607B、8B8核16GB8GBRTX3070、RTX…...

macOS部署DeepSeek-r1

好奇&#xff0c;跟着网友们的操作试了一下 网上方案很多&#xff0c;主要参考的是这篇 DeepSeek 接入 PyCharm&#xff0c;轻松助力编程_pycharm deepseek-CSDN博客 方案是&#xff1a;PyCharm CodeGPT插件 DeepSeek-r1:1.5b 假设已经安装好了PyCharm PyCharm: the Pyth…...

基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、为什么选择这两个芯片&#xff1f;1.1 STM32微控制器1.2 ROHM BD623x电机驱动 二、核心控制原理详解2.1 H桥驱动奥…...

基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)

在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...

C++中const T为什么少见?它有什么用途?

在C中&#xff0c;右值引用&#xff08;T&&&#xff09;是移动语义和完美转发的核心特性之一&#xff0c;但你是否注意到&#xff0c;const T&&&#xff08;const右值引用&#xff09;却很少被使用&#xff1f;它到底有什么用途&#xff1f; 今天我们就来深入…...

Leetcode 位计算

3095. 或值至少 K 的最短子数组 I 3097. Shortest Subarray With OR at Least K II class Solution:def minimumSubarrayLength(self, nums: List[int], k: int) -> int:n len(nums)bits [0] * 30res infdef calc(bits):return sum(1 << i for i in range(30) if…...

SpringBoot3.x整合WebSocket

SpringBoot3.x整合WebSocket 本文主要介绍最新springboot3.x下如何整合WebSocket. WebSocket简述 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议&#xff0c;它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议&#xff…...

猿大师办公助手对比其他WebOffice在线编辑Office插件有什么优势

1. 原生Office功能完整嵌入&#xff0c;排版一致性保障 猿大师办公助手直接调用本地安装的微软Office、金山WPS或永中Office&#xff0c;支持所有原生功能&#xff08;如复杂公式、VBA宏等&#xff09;&#xff0c;确保网页编辑与本地打开的文档排版完全一致。 提供OLE嵌入和完…...

STM32创建静态库lib

创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL库的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL库配置&#xff1a;stm32f4xx_ll_conf.h 1.3 移植通用文…...

Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠

Hive JOIN过滤条件位置玄学:ON vs WHERE的量子纠缠 作为数据工程师,Hive JOIN就像吃火锅选蘸料——放错位置味道全变!今天带你破解字节/阿里等大厂高频面试题:ON和WHERE后的过滤条件究竟有什么不同? 一、核心差异对比表 特性ON子句WHERE子句执行时机JOIN操作时JOIN完成后…...

MAC快速本地部署Deepseek (win也可以)

MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;本地运行框架&#xff0c;旨在简化大模型的部署和管理流程&#xff0c;使开发者、研究人员及爱好者能够高效地在本地环境中实验和…...

javaEE-13.spring MVC

目录 什么是spring web mvc: 什么是MVC: 一.创建一个spring项目 二.实现功能: 创建helloController.java项目: 建立连接&#xff1a; RequestMapping注解: 1.RequestMapping注解的使用&#xff1a; 2. RequestMapping 是GET还是POST请求 3.指定请求方法 RestControll…...

C/C++ | 每日一练 (2)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…...

Nginx 常用命令和部署详解及案例示范

一、Nginx常用命令 1.1 启动 Nginx 要启动 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl start nginx1.2 停止 Nginx 如果需要停止 Nginx 服务&#xff0c;可以使用以下命令&#xff1a; sudo systemctl stop nginx1.3 重启 Nginx 在修改了 Nginx…...

云原生入门系列|第12集:K8s日常运维实战,新手也能稳管集群

前言 各位云原生入门的小伙伴,欢迎继续跟进《云原生入门系列》专栏!上一集我们掌握了K8s故障排查的核心方法,能快速定位并解决Pod、Service、存储等常见故障,避免业务中断。 但K8s的运维不止“排查故障”,更重要的是“日常管理”——就像养花草,不仅要在生病时治病,还…...

从“学模型”到“做应用”:AI产品的30天实战进化指南

摘要&#xff1a;面对AI热潮&#xff0c;你是否陷入“学不完的技术栈、用不上的大模型”困境&#xff1f;本文基于真实行业分享与学习路径&#xff0c;拆解三大认知误区&#xff0c;提出“以场景切入&#xff0c;以终为始”的30天实战法。你将获得一套从业务问题定义、知识工程…...

UniFormer:跨平台优化的Transformer架构设计与实践

1. UniFormer架构设计背景与核心挑战Transformer架构近年来在自然语言处理和计算机视觉领域取得了革命性进展&#xff0c;但其计算复杂度与内存占用问题始终是实际部署中的主要瓶颈。传统Transformer中的自注意力机制具有O(N)的计算复杂度&#xff0c;当处理长序列时&#xff0…...

24 小时国际暗金 国际暗银实时行情 API 接口 PAXG PAXS 数据对接教程

摘要&#xff1a;本文分享一款支持 724 小时不间断推送的国际暗金、国际暗银行情 API 接口&#xff0c;脉动数据行情平台提供 WebSocketHTTP 双模式对接&#xff0c;含完整接入代码、字段说明与对接注意事项&#xff0c;适合量化交易、行情展示、风控系统直接使用&#xff0c;新…...

DINOv2实战指南 | 构建高效图像检索系统的核心步骤

1. DINOv2模型与图像检索系统概述 第一次接触DINOv2时&#xff0c;我被它强大的特征提取能力惊艳到了。这个由Meta AI团队开源的视觉模型&#xff0c;不需要任何微调就能在各种图像任务中表现出色。简单来说&#xff0c;DINOv2就像是一个"视觉通才"&#xff0c;它能将…...

OpenCore Legacy Patcher深度解析:如何让老款Mac突破系统限制

OpenCore Legacy Patcher深度解析&#xff1a;如何让老款Mac突破系统限制 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一个开源…...

Google Cloud Next 26: 定义 “智能体企业“ 新纪元

以下文章来源于谷歌云服务&#xff0c;作者 Google CloudThomas KurianGoogle Cloud 首席执行官本周&#xff0c;我们在 Next 26 大会上宣布了一系列创新技术&#xff0c;包括全新统一的 AI 技术栈、第八代 TPU (Tensor Processing Unit)&#xff0c;以及在数据、安全和生产力领…...

别再傻傻print了!用tqdm给你的Python脚本加个进度条,代码瞬间专业

告别print调试&#xff01;用tqdm打造专业级Python进度监控系统 在数据处理和批量任务中&#xff0c;我们常常需要监控长时间运行的循环进度。传统print语句虽然简单直接&#xff0c;但会导致终端输出混乱、难以估算剩余时间&#xff0c;更无法在Jupyter等环境中提供优雅的交互…...

快递鸟批量快递查询Skill,正式上线 Clawhub!可在WorkBuddy一键安装技能!

快递鸟批量快递查询Skill&#xff0c;正式上线 Clawhub&#xff01;可在WorkBuddy一键安装技能&#xff01;快递鸟 2026-04-21企业数字化转型浪潮下&#xff0c;AI Agent正在重塑业务交互模式。从智能客服到办公助手&#xff0c;越来越多的企业开始探索将AI能力融入日常工作流程…...

网络安全SRC漏洞挖掘学习路线 - (四):常见漏洞挖掘实操,实现首次挖洞突破

网络安全SRC漏洞挖掘学习路线 - 第四期&#xff1a;常见漏洞挖掘实操&#xff0c;实现首次挖洞突破 摘要&#xff1a;承接第三期信息收集实战&#xff0c;本期作为SRC漏洞挖掘的“核心突破期”&#xff0c;聚焦新手最易上手、最高发的4类SRC漏洞——弱口令、SQL注入、XSS跨站脚…...