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

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

image-20241124195511789

思路🧐:

需要找到子串异位词,也就是只看该子串是否有相同字母而不管位置是否相同。分析题目发现只需要单调向前找异位词,则可以使用滑动窗口求解,注意这里每当左右边框长度大于p的长度时需要更新左边框,并且异位词可以用哈希表进行判断:

定义两个哈希表,一个s的哈希表,一个p的哈希表。通过分析题目,异位词不严格要求一一对应,则只需要判断p的字母是否在我们的子串中,我们可以再定义一个count,当插入时,p的哈希表<=s的哈希表,则该次插入是成功统计到p中的字母,count++;删除时,p的哈希表<=s的哈希表,则该次删除把成功统计的字母删了,count–。

最后,当count == len时,表示该子串中找到了异位词,将left插入到vector中即可。

image-20241124195415217

代码🔎:

class Solution {
public:vector<int> findAnagrams(string s, string p) {int hashs[26] = { 0 }; //s的哈希表int hashp[26] = { 0 }; //p的哈希表for(auto e : p)hashp[e - 'a']++;int count = 0;int len = p.size();vector<int> ret;for(int left = 0, right = 0; right < s.size(); right++){hashs[s[right] - 'a']++;//如果插入时,s的哈希表的字母次数小于等于p,则为有效插入,count++if(hashs[s[right] - 'a'] <= hashp[s[right] - 'a'])count++;//当左右边框距离大于p,表示后面不可能再出现异位词子串,则需要更新左边框if(right - left + 1 > len){//删除时,s的哈希表的字母次数小于等于p,则为有效删除,count--if(hashs[s[left] - 'a'] <= hashp[s[left] - 'a'])count--;hashs[s[left++] - 'a']--; //减去字母次数,移动左边框}if(count == len)ret.push_back(left);}return ret;}
};

时间复杂度:O(N) 空间复杂度:O(1)
image-20241124201832058

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

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

相关文章

算法刷题Day8:BM30 二叉搜索树与双向链表

题目 牛客网题目传送门 思路 对二叉搜索树进行中序遍历&#xff0c;结果就是按序数组。因此想办法把前面遍历过的节点给记下来&#xff0c;记作pre。当遍历到某个节点node的时候&#xff0c;令前驱指向pre&#xff0c;然后让pre的后驱指向node。 代码 class TreeNode:def…

1.Git安装与常用命令

前言 Git中会用到的一些基本的Linux命令 ls/ll 查看文件目录 (ll可以看隐藏文件)cat 查看文件内容touch 创建文件vi vi编辑器 1.下载与安装 安装成功后鼠标右键会出现Git Bash和Git GUI Git GUI&#xff1a;GUI图形化界面 Git Bash&#xff1a;Git提供的命令行工具 当安装…

ultralytics-YOLOv11的目标检测解析

1. Python的调用 from ultralytics import YOLO import os def detect_predict():model YOLO(../weights/yolo11n.pt)print(model)results model(../ultralytics/assets/bus.jpg)if not os.path.exists(results[0].save_dir):os.makedirs(results[0].save_dir)for result in…

【docker】docker compose多容器部署

Docker Compose 的详细讲解与实际应用 什么是 Docker Compose&#xff1f; Docker Compose 是一个工具&#xff0c;用于定义和运行多容器 Docker 应用。 通过一个 docker-compose.yml 文件&#xff0c;可以同时启动多个服务&#xff0c;简化多容器管理。 Docker Compose 的核心…

【AI系统】CANN 算子类型

CANN 算子类型 算子是编程和数学中的重要概念&#xff0c;它们是用于执行特定操作的符号或函数&#xff0c;以便处理输入值并生成输出值。本文将会介绍 CANN 算子类型及其在 AI 编程和神经网络中的应用&#xff0c;以及华为 CANN 算子在 AI CPU 的详细架构和开发要求。 算子基…

C++:特殊类设计及类型转换

目录 一.常见特殊类的设计方式 1.请设计一个类&#xff0c;不能被拷贝 2.请设计一个类&#xff0c;只能在堆上创建对象 3.请设计一个类&#xff0c;只能在栈上创建对象 4.请设计一个类&#xff0c;不能被继承 5.请设计一个类&#xff0c;只能创建一个对象(单例模式) 二.C…

GPT打字机效果—— fetchEventSouce进行sse流式请求

EventStream基本用法 与 WebSocket 不同的是&#xff0c;服务器发送事件是单向的。数据消息只能从服务端到发送到客户端&#xff08;如用户的浏览器&#xff09;。这使其成为不需要从客户端往服务器发送消息的情况下的最佳选择。 const evtSource new EventSource(“/api/v1/…

《嵌入式硬件设计》

一、引言 嵌入式系统在现代科技中占据着至关重要的地位&#xff0c;广泛应用于消费电子、工业控制、汽车电子、医疗设备等众多领域。嵌入式硬件设计作为嵌入式系统开发的基础&#xff0c;直接决定了系统的性能、可靠性和成本。本文将深入探讨嵌入式硬件设计的各个方面&#xff…

FreeSWITCH mod_conference 的按键会控

又是一篇命题作文 mod_conference 官方文档&#xff1a; https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_conference_3965534/ 英文不好的可以看中文&#xff1a; http://www.freeswitch.org.cn/books/references/1.7-mod_conference.html…

Linux67 绑定网卡【bonding和team】

Linux 网卡绑定在RHEL 7 之前&#xff0c;网卡绑定常用的是bonding模块&#xff0c;在RHEL7开始&#xff0c;支持使用team作网卡绑定&#xff0c;但在RHEL7中&#xff0c;bonding依然可用。以下主要介绍bonding模块配置双网卡绑定。Linux网卡绑定模式介绍模式简介0 for balance…

服务器与普通电脑有什么区别?

服务器和普通电脑&#xff08;通常指的是个人计算机&#xff0c;即PC&#xff09;有众多相似之处&#xff0c;主要构成包含&#xff1a;CPU&#xff0c;内存&#xff0c;芯片&#xff0c;I/O总线设备&#xff0c;电源&#xff0c;机箱及操作系统软件等&#xff0c;鉴于使用要求…

hhdb数据库介绍(10-33)

管理 数据归档 归档记录查询 功能入口&#xff1a;“管理->数据归档->归档记录查询” 需要确保配置的归档用户对数据归档规则所在的逻辑库具备CREATE权限&#xff0c;以及对原数据表具有所有权限。 清理归档数据 &#xff08;一&#xff09;功能入口&#xff1a;“…

重学设计模式-工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

在平常的学习和工作中&#xff0c;我们创建对象一般会直接用new&#xff0c;但是很多时候直接new会存在一些问题&#xff0c;而且直接new会让我们的代码变得非常繁杂&#xff0c;这时候就会巧妙的用到设计模式&#xff0c;平常我们通过力扣学习的算法可能并不会在我们工作中用到…

微服务springboot详细解析(一)

目录 1.Spring概述 2.什么是SpringBoot&#xff1f; 3.第一个SpringBoot程序 4.配置参数优先级 5.springboot自动装配原理 6.SpringBootApplication&SpringApplication.run 7.ConfigurationProperties(prefix "") 8.Validated数据校验 29、聊聊该如何写一…

华为HarmonyOS 让应用快速拥有账号能力 -- 2 获取用户头像昵称

场景介绍 如应用需要完善用户头像昵称信息&#xff0c;可使用Account Kit提供的头像昵称授权能力&#xff0c;用户允许应用获取头像昵称后&#xff0c;可快速完成个人信息填写。以下只针对Account kit提供的头像昵称授权能力进行介绍&#xff0c;若要获取头像还可通过场景化控…

供应链系统设计-何为“前”“中”“后”台系统

概述 大家看文章或交流的时候&#xff0c;经常听到听到XX前台系统、XX中台系统、XX后台系统。而且经常容易混淆并且系统边界定义模糊不清&#xff0c;今天就和大家讨论一下什么是前台、中台和后台系统。 不知道大家对于“康威定律”是否熟悉。在这里简单的给大家介绍一下&…

vue中使用socket.io统计在线用户

目录 一、引入相关模块 二、store/modules 中封装socketio 三、后端代码(nodejs) 一、引入相关模块 main.js 中参考以下代码 ,另外socketio的使用在查阅其它相关文章时有出入,还是尽量以官方文档为准 import VueSocketIO from vue-socket.io import SocketIO from socket.io-…

「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历

本篇将带你实现一个简易日历应用&#xff0c;显示当前月份的日期&#xff0c;并支持选择特定日期的功能。用户可以通过点击日期高亮选中&#xff0c;还可以切换上下月份&#xff0c;体验动态界面的交互效果。 关键词 UI互动应用简易日历动态界面状态管理用户交互 一、功能说明…

【AI系统】推理系统介绍

推理系统介绍 推理系统是一个专门用于部署神经网络模型&#xff0c;执行推理预测任务的 AI 系统。它类似于传统的 Web 服务或移动端应用系统&#xff0c;但专注于 AI 模型的部署与运行。通过推理系统&#xff0c;可以将神经网络模型部署到云端或者边缘端&#xff0c;并服务和处…

Docker 之 bootfs 和 rootfs概述

概述 在 Docker 技术中&#xff0c;理解 bootfs&#xff08;boot file system&#xff09;和 rootfs&#xff08;root file system&#xff09;的概念对于深入掌握容器技术至关重要。这两个文件系统是 Docker 镜像和容器运行的基础。 bootfs&#xff08;Boot File System&am…