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

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

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

思路:滑动窗口

  1. s包含p的异位词 ——> 则s.Length > p.Length;反之,s不包含p的异位词,返回空数组。
  2. s.Length >= p.Length,需要遍历 s 的每个长度为 p 长度的子字符串,判断是否存在子字符串是 p 的异位词。比较每个字符的出现次数,判断每个子字符串是否为 p 的异位词。
  3. 首先遍历 p 计算每个字符的出现次数,然后遍历 s 的首个子字符串并计算每个字符的出现次数。
  4. 每次将子字符串的下标范围向右移动一位,则有一个字符移出子字符串,有一个字符移入子字符串,更新子字符串中这两个字符的出现次数之后,比较子字符串中的每个字符的出现次数是否与 p 中的每个字符的出现次数相同。
    public class Solution {public IList<int> FindAnagrams(string s, string p) {IList<int> startIndices = new List<int>();int sLength = s.Length, pLength = p.Length;if(sLength < pLength)return startIndices;int[] sCounts = new int[26];int[] pCounts = new int[26];for(int i = 0; i < pLength; i++){char c1 = s[i];sCounts[c1 - 'a']++;char c2 = p[i];pCounts[c2 - 'a']++;}if (CheckEqual(sCounts, pCounts)) {startIndices.Add(0);}for(int i = pLength; i < sLength; i++){char prev = s[i - pLength];//上一次的窗口第一个元素sCounts[prev - 'a']--;char curr = s[i];//末尾元素sCounts[curr - 'a']++;if (CheckEqual(sCounts, pCounts)) {startIndices.Add(i - pLength + 1);}}return startIndices;}public bool CheckEqual(int[] sCounts, int[] pCounts) {for (int i = 0; i < 26; i++){if (sCounts[i] != pCounts[i]) {return false;}}return true;}
    }

    复杂度分析

  • 时间复杂度:O((m+n)×∣Σ∣),其中 m 和 n 分别是字符串 s 和 p 的长度,Σ 是字符集,这道题中 Σ 是全部小写英语字母,∣Σ∣=26。只有当 s 的长度大于等于 p 的长度时才需要遍历字符串 s 寻找 p 的异位词,需要遍历字符串 s 和 p 各一次,对于每个子字符串需要 O(∣Σ∣) 的时间判断是否为 p 的异位词。
  • 空间复杂度:O(∣Σ∣),其中 Σ 是字符集,这道题中 Σ 是全部小写英语字母,∣Σ∣=26。记录 p 和 s 中每个字母的出现次数需要 O(∣Σ∣) 的空间。

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

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

相关文章

大数据新视界 --大数据大厂之数据科学项目实战:从问题定义到结果呈现的完整流程

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

组合逻辑电路的设计

目录 基本设计步骤 应用实例1&#xff08;三人表决电路&#xff09; 逻辑抽象 列真值表 化简&#xff08;卡诺图&#xff09; 转化为与非表达式 画逻辑图 应用实例2&#xff08;二进制转换为格雷码&#xff09; 逻辑抽象 列真值表 卡诺图化简 画逻辑图 基本设计…

【rust】rust条件编译

在c语言中&#xff0c;条件编译是一个非常好用的功能&#xff0c;那么rust中如何实现条件编译呢? rust的条件编译需要两个部分&#xff0c;一个是fratures&#xff0c;另一个是cfg。Cargo feature是一个非常强大的功能&#xff0c;可以提供条件编译和可选依赖项的高级特性&…

C++ -命名空间-详解

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【C】 欢迎点赞&#x1f44d;收藏⭐关注❤️ C -命名空间-详解 1.C语言缺点之一 -- 命名冲突2.命名空间2.1定义2.2使用访问命名空间中的变量展开命名空间域指定访问命名空间域 2.3其他功能 3.C 标准库中的命名空间指定展开…

云计算实训50——Kubernetes基础命令、常用指令

一、Kubernetes 自动补齐 # 安装自动补齐软件 [rootmaster ~]# yum -y install bash-completion # 临时开启自动补齐功能 [rootmaster ~]# source # 永 久开启自动补齐功能 [rootmaster ~]# echo "source > ~/.bashrc 二、Kubernetes 基础命令 kubectl [command] …

Linux:进程(二)

目录 一、cwd的理解 二、fork的理解 1.代码共享 2.各司其职 3.fork的返回值 三、进程状态 1.进程排队 2.进程状态 运行状态 一、cwd的理解 cwd&#xff08;current working directory&#xff09;。译为当前工作目录。 在C语言中&#xff0c;使用fopen函数打开文件时&…

MindShare PCIE 3.0 笔记-第一二章

MindShare 官网&#xff0c;地址如下: MindShare Chapter 1&#xff1a;PCIE 背景介绍 - PCI 总线模型 1. 以 PCI 总线作为外设总线的 SOC 芯片架构 下图展示了一个以 PCI 总线作为外设总线的 SOC 芯片架构(PCI 总线类似 AXI 下的 AHB&#xff1f;)&#xff1a; 由上图可知…

linux下的日志编写

1、日志初始化创建 2、日志写入 3、日志关闭 log.c #include "log.h"static log_t LOG;//初始化日志文件&#xff0c;在当前目录创建日志文件 int log_init(char *pdirname) {time_t t;struct tm *ptm NULL;char filepath[64] {0};int ret 0;time(&t);ptm …

linux安全软件Hydra使用教程

Hydra 是一个强大的网络登录工具&#xff0c;常用于渗透测试&#xff0c;支持对多种服务和协议&#xff08;如 SSH、FTP、HTTP 等&#xff09;进行暴力crack攻击。它可以通过字典攻击来测试用户名和密码的有效性。以下是关于如何使用 Hydra 的基本步骤和示例&#xff1a; 1. 安…

Mapsui:一个 .NET 开源的地图组件库

前言 今天大姚给大家分享一个.NET开源&#xff08;MIT License&#xff09;、免费、同时支持多平台框架&#xff08;MAUI、WPF、Avalonia、Uno、Blazor、WinUI、Eto、.NET Android 和 .NET iOS&#xff09;地图组件库&#xff1a;Mapsui。 项目源代码 支持的UI框架的NuGet包 创…

车市状态喜人,国内海外“两开花”

文/王俣祺 导语&#xff1a;随着中秋假期告一段落&#xff0c;“金九”也正式过半&#xff0c;整体上这个销售旺季的数据可以说十分喜人&#xff0c;各家车企不是发布新车、改款车就是推出了一系列购车权益&#xff0c;充分刺激了消费者的购车热情。再加上政府政策的鼎力支持&a…

828华为云征文|部署在线文件管理器 Spacedrive

828华为云征文&#xff5c;部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…

MFC获取网页的html文本

使用 CInternetSession 类和 CHttpFile 类&#xff1b; 在stdafx.h中加入 #include <afxinet.h> &#xff1b; 基本的代码如下&#xff0c; void CMFCApplication3Dlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码try{CInternetSession session;CH…

Java创建教程!(*  ̄3)(ε ̄ *)

Java 构造函数 Java面向对象设计 - Java构造函数 构造函数是用于在对象创建后立即初始化对象的代码块。 构造函数的结构看起来类似于一个方法。 声明构造函数 构造函数声明的一般语法是 <Modifiers> <Constructor Name>(<parameters list>) throws <…

用户体验不好的网站都有哪些特点?

用户体验不好的网站通常具有一些共同的特点&#xff0c;这些特点会显著影响用户的浏览体验和满意度。下面详细介绍用户体验不好的网站的多个方面&#xff1a; 用户体验不好的网站都有哪些特点&#xff1f; 页面加载时间过长 用户等待时间长&#xff1a;如果一个网站的页面加载…

[Redis][Redis简介]详细讲解

目录 1.认识 Redis2.Redis 特性1.速度快2.基于键值对的数据结构的服务器3.丰富的功能4.简单稳定5.客户端语言多6.高扩展性7.持久化(Persistence)8.主从复制9.⾼可⽤和分布式 3.Redis 使用场景1.数据库2.Cache3.消息队列 4.注意 1.认识 Redis Redis是⼀种基于键值对(Key-Value)…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3566移植案例(下)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统STM32F407芯片移植案…

PyQt5-QCheckBox-开关按钮

效果预览 实现代码 from PyQt5.QtWidgets import QCheckBox, QApplication, QWidget, QVBoxLayout from PyQt5.QtCore import Qt, QRect, QPropertyAnimation, QEasingCurve, pyqtProperty from PyQt5.QtGui import QPainter, QColor, QPen, QFontclass CompactSwitchCheckbox…

《Google软件测试之道》笔记

介绍 GTAC&#xff1a;Google Test Automation Conference&#xff0c;Google测试自动化大会。 本书出版之前还有一本《微软测试之道》&#xff0c;值得阅读。 质量不是被测试出来的&#xff0c;但未经测试也不可能开发出有质量的软件。质量是开发过程的问题&#xff0c;而不…

股指期货的详细玩法功能与应用解析

股指期货作为一种重要的金融衍生工具&#xff0c;为投资者提供了多样化的投资和风险管理手段。本文将详细探讨股指期货的三大主要功能&#xff1a;风险规避、价格发现和资产配置。 第一&#xff0c;风险规避功能 1.套期保值&#xff1a;股指期货的风险规避功能主要通过套期保值…