每日OJ题_算法_滑动窗口⑥_力扣438. 找到字符串中所有字母异位词

目录

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

解析及代码1

解析及代码2


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

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 * 10^4
  • s 和 p 仅包含小写字母
class Solution {
public:vector<int> findAnagrams(string s, string p) {}
};

解析及代码1

首先用两个数组做哈希表敲出来的代码:

class Solution {
public:vector<int> findAnagrams(string s, string p) {int hash1[26] = { 0 }, hash2[26] = { 0 };for (auto& e : p){hash2[e - 'a']++;}int left = 0, right = 0, n1 = s.size(), n2 = p.size();vector<int> ret;if(n2 > n1)return ret;while (right < n2){hash1[s[right++] - 'a']++;}while (right < n1){int j = 0;for (; j < 26; ++j){if (hash1[j] != hash2[j]){break;}}if (j == 26){ret.push_back(left);}hash1[s[right++] - 'a']++;hash1[s[left++] - 'a']--;}int j = 0;for (; j < 26; ++j) // 再判断一遍{if (hash1[j] != hash2[j]){break;}}if (j == 26){ret.push_back(left);}return ret;}
};

解析及代码2

改进:用一个变量count维护判断逻辑

class Solution {
public:vector<int> findAnagrams(string s, string p) {int hash1[26] = { 0 }, hash2[26] = { 0 };for (auto& e : p){hash2[e - 'a']++;}int left = 0, right = 0, n1 = s.size(), n2 = p.size(), count = 0;vector<int> ret;if(n2 > n1)return ret;while (right < n1){char in = s[right];if(++hash1[in - 'a'] <= hash2[in - 'a']){++count;  // 进窗口和维护count}if(right - left + 1 > n2) // 判断{char out = s[left++];if(hash1[out - 'a']-- <= hash2[out - 'a']){--count; // 出窗口和维护count}}if (count == n2) // 更新结果{ret.push_back(left);}++right;}return ret;}
};

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

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

相关文章

Mac Could not find the GDAL library 问题解决

目录 1. 参考2. 问题描述3. 解决步骤3.1. 安装依赖包3.2. 配置 GDAL_LIBRARY_PATH3.3. 配置 GEOS_LIBRARY_PATH 1. 参考 https://docs.djangoproject.com/en/5.0/ref/contrib/gis/install/#macos 2. 问题描述 苹果系统 Mac 中搭建 GeoDjango 开发环境时出现以下报错&#xf…

第十四章 MyBatis

第十四章 MyBatis 1.入门-课程介绍2.入门-快速入门程序3.配置SQL提示4.入门-JDBC5.入门-数据库连接池6.入门-lombok工具包介绍7.基础操作-环境准备8.基础操作-删除9.基础操作-删除&#xff08;预编译SQL&#xff09;10.基础操作-新增11.基础操作-新增&#xff08;主键返回&…

Python初识——小小爬虫

一、找到网页端url 打开浏览器&#xff0c;打开百度官方网页点击图片&#xff0c;打开百度图片 鼠标齿轮向下滑&#xff0c;点击宠物图片 进入宠物图片网页&#xff0c;在网页空白处点击鼠标右键&#xff0c;弹出的框中最下方显示“检查”选项&#xff0c;点击&#xff08;我是…

安全帽识别-赋能深圳自贸中心智慧工地

在当今的建筑行业中&#xff0c;安全管理一直是一个至关重要的议题。深圳自贸中心项目在这方面进行了一次有益的尝试——实施智慧工地安全帽识别系统。本文将对这一创新举措进行简要介绍。 项目背景 深圳自贸中心&#xff0c;作为一项标志性建设项目&#xff0c;承载着城市发展…

云的网络安全优势

在考虑迁移到云计算时&#xff0c;网络安全已经成为一个关键因素。毫无疑问&#xff0c;企业希望通过网络浏览器或移动应用为员工、合作伙伴和客户提供一致的数据和应用访问权限&#xff0c;以保持竞争力。 网络攻击的性质和重要性正变得越来越复杂&#xff0c;并造成严重的财…

【ASP.NET Core 基础知识】--路由和请求处理--Attribute路由

一、介绍 在ASP.NET Core中&#xff0c;路由是将传入的URL请求映射到正确的控制器和操作的方法。Attribute路由是一种基于属性&#xff0c;用于定义路由规则的方式&#xff0c;通过在控制器类和操作方法上应用特定的属性&#xff0c;来定义URL模板。 基本概念&#xff1a; **路…

线性代数逆矩阵的求法

在线性代数中&#xff0c;逆矩阵是一个非常重要且有趣的概念。一个 n 阶方阵 A 的逆矩阵&#xff0c;记作 A^-1&#xff0c;是指存在另一个 n 阶方阵 B&#xff0c;使得 A 和 B 的乘积等于单位矩阵 E&#xff0c;即&#xff1a; A * B E 或者等价地&#xff1a; B * A E 这里…

uniapp技术积累

2024.01.19 1.textarea &#xff08;1&#xff09;默认文字样式设置 placeholder-style"color:rgba(0,0,0,0.7)" 2024.01.18 1.hbuilderx运行uniapp到ipad&#xff08;复用率低&#xff09; &#xff08;1&#xff09;电脑端&#xff1a;首先会有一个运行工具包&…

只用Mysql搞一个分布式锁

在web开发中&#xff0c;分布式的锁的应用场景甚多&#xff0c;我们可以通过分布式锁来进行一些仅依赖于数据库的事务很难直接保证原子性的操作&#xff0c;比如多种不同数据源的访问&#xff0c;网络通信等等。多数情况下我们会使用memcache的add, redis中在set中指定nx参数等…

怎么用小程序将身份证转为结构化Excel?

随着科技的不断发展&#xff0c;我们的生活变得越来越智能化。现在&#xff0c;我们可以使用金鸣表格文字识别小程序来识别身份证并转为结构化的excel&#xff0c;并且可自动核对真伪&#xff0c;保留头像。金鸣表格文字识别小程序是一种基于人工智能技术的应用程序&#xff0c…

nacos,nginx及java服务自重启

微服务之服务自重启 设置Nacos开机自启在/lib/systemd/system文件夹下创建nacos.service文件 [Unit] Descriptionnacos Afternetwork.target[Service] Typeforking ExecStart/opt/nacos-server-1.4.1/nacos/bin/startup.sh -m standalone ExecReload/opt/nacos-server-1.4.1/…

将字符串中的制表符替换为指定数量的空格expandtabs()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将字符串中的制表符 替换为指定数量的空格 expandtabs() [太阳]选择题 请问以下代码text3的空白处是&#xff1f; text1 "这里有一个\t制表符" text2 "这里有一个12345制表符…

第二次作业+第三次作业

第二次作业第三次作业 第二次作业 题目&#xff1a; 网站需求&#xff1a; ​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[ww…

利用HTML+CSS+JS打造炫酷时钟网页的完整指南

引言 在现代Web开发中&#xff0c;制作一个引人注目的时钟网页是一种常见而令人愉悦的体验。本文将介绍如何使用HTML、CSS和JavaScript来创建一个炫酷的时钟网页&#xff0c;通过这个项目&#xff0c;你将学到如何结合这三种前端技术&#xff0c;制作一个动态且美观的时钟效果…

vue 中的watch 的deep属性

在 Vue 中&#xff0c;watch 是一个用于观察和响应 Vue 实例上的数据变化的选项。当你在一个属性上设置 watch 时&#xff0c;Vue 会监视该属性的变化并在变化时执行相应的回调函数。 deep 属性是 watch 选项的一个属性&#xff0c;用于深度观察一个对象的变化。默认情况下&am…

深入探索 Android 中的 Runtime

深入探索 Android 中的 Runtime 一、什么是 Runtime二、Android 中的 Runtime 类型2.1. Dalvik Runtime2.2. ART&#xff08;Android Runtime&#xff09; 三、Runtime 的作用和特点3.1. 应用程序执行环境3.2. 跨平台支持3.3. 性能优化3.4. 应用程序优化 四、与应用开发相关的重…

Unity3D Pico VR 手势识别物体交互 适配 MRTK3

当前Pico已经支持手势识别了&#xff0c;但是提供的PICO Unity Integration SDK 中是没有手势和物体交互的功能&#xff0c;Unity XR Interaction Toolkit提供的手势识别物体交互对 Quest适配的挺好的&#xff0c;Pico 当前只能用指尖点触还不能对物体进行抓握以及手势控制射线…

ubuntu18.04以上版本使用systemd 开启自启动服务

进入/etc/systemd/system/目录&#xff0c;创建myscript.service&#xff0c;并赋予权限 sudo vim /etc/systemd/system/myscript.service [Unit] DescriptionMy Script Service Afternetwork.target [Service] Userroot ExecStart/home/start.sh Restartalways [Install]…

【水文】打印99乘法表

#include <stdio.h> int main() { for (int i 1; i < 9; i) { for (int j 1; j < i; j) { printf("%d*%d%d\t", j, i, i * j); } printf("\n"); } return 0; }

JS-WebAPIs-其他事件(三)

• 页面加载事件 页面加载事件主要有二种事件&#xff0c;分别是load和DOMContentLoaded 加载外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件为什么要学&#xff1f; 有些时候需要等页面资源全部处理完了做一些事情老代码喜欢把 scrip…