力扣刷题DAY6(滑动窗口/中等+栈/简单、中等)

一、滑动窗口

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

方法一:哈希表

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ans;unordered_map<char, int> target;for (int i = 0; i < p.size(); i++) {target[p[i]]++;}int l = 0, r = 0;unordered_map<char, int> window;while (r < s.size()) {window[s[r]]++;if (r - l + 1 == p.size()) {if (target == window)ans.emplace_back(l);window[s[l]]--;if (window[s[l]] == 0)window.erase(s[l]);l++;}r++;}return ans;}
};

思路:

复杂度分析

  • 时间复杂度:O(n):r 线性遍历 s,每次操作 window 仅 O(1)
  • 空间复杂度:O(1)(哈希表最多存 26 个字母)。

 优化版本:

(因为是字母,所以用两个数组替换哈希表)

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> ans;int target[26] = {}; // 初始化for (char c : p) {target[c - 'a']++;}int l = 0, r = 0;int window[26] = {}; // 初始化while (r < s.size()) {window[s[r] - 'a']++;if (r - l + 1 == p.size()) {if (memcmp(target, window, sizeof(target)) == 0) // 修正数组比较方式ans.emplace_back(l);window[s[l] - 'a']--;l++;}r++;}return ans;}
};

 再优化版本:

(用 cnt[c]-- 和 cnt[c]++ 直接调整窗口,避免窗口每次移动都重新统计字符频率。)

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()) { // s' 和 p 的每种字母的出现次数都相同ans.push_back(left); // s' 左端点下标加入答案}}return ans;}
};

二、栈

有效的括号

 方法一:vector

class Solution {
public:bool isValid(string s) {vector<char> cnt;for (int i = 0; i < s.size(); i++) {if (s[i] == '(')cnt.emplace_back(s[i]);else if (s[i] == '[')cnt.emplace_back(s[i]);else if (s[i] == '{')cnt.emplace_back(s[i]);else if (s[i] == ')') {if (cnt.size() && cnt.back() == '(') {cnt.pop_back();continue;} elsereturn false;} else if (s[i] == ']') {if (cnt.size() && cnt.back() == '[') {cnt.pop_back();continue;} elsereturn false;} else if (s[i] == '}') {if (cnt.size() && cnt.back() == '{') {cnt.pop_back();continue;} elsereturn false;}}if (!cnt.size())return true;elsereturn false;}
};

 方法二:栈

class Solution {
public:bool isValid(string s) {int n = s.size();if (n % 2 == 1) {return false;}unordered_map<char, char> pairs = {{')', '('},{']', '['},{'}', '{'}};stack<char> stk;for (char ch: s) {if (pairs.count(ch)) {if (stk.empty() || stk.top() != pairs[ch]) {return false;}stk.pop();}else {stk.push(ch);}}return stk.empty();}
};

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

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

相关文章

DeepSeek V3 源码:从入门到放弃!

从入门到放弃 花了几天时间&#xff0c;看懂了DeepSeek V3 源码的逻辑。源码的逻辑是不难的&#xff0c;但为什么模型结构需要这样设计&#xff0c;为什么参数需要这样设置呢&#xff1f;知其然&#xff0c;但不知其所以然。除了模型结构以外&#xff0c;模型的训练数据、训练…

thinkphp5.1 在fetch模版就超时

场景 当被渲染模版不存在&#xff0c;请求不响应任何内容&#xff0c;过一会就timeout 排查过程 使用xdebug,追踪代码&#xff0c;发现走到D:\temporary_files\m40285_mini\40285_mini\thinkphp\library\think\exception\Handle.php&#xff0c;进入死循环&#xff0c;一直…

【Vue CLI脚手架开发】——6.scoped样式

文章目录 一、scoped是什么二、应用案例1.使用代码2.原理3父组件App未添加scoped影响 一、scoped是什么 我们知道vue为了防止css样式污染&#xff0c;在每个组件中提供了 scoped属性进行限定css作用域&#xff1b;当<style>标签有 scoped 属性时&#xff0c;它的 CSS 只…

微服务,服务治理nacos,负载均衡LOadBalancer,OpenFeign

1.微服务 简单来说&#xff0c;微服务架构风格[1]是一种将一个单一应用程序开发为一组小型服务的方法&#xff0c;每个服务运行在 自己的进程中&#xff0c;服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并 且可通过全自动部署机制独立部署。这…

STM32-USART串口数据包

一&#xff1a;HEX数据包发送 1.为了收发数据包&#xff0c;先定义两个缓存区的数组 &#xff0c;这4个数据只存储发送或者接收的载荷数据&#xff0c;包头和包尾不存 uint8_t Serial_TxPacket[4]; uint8_t Serial_RxPacket[4]; uint8_t Serial_RxFlag;//接收一个数据包就置F…

[项目]基于FreeRTOS的STM32四轴飞行器: 四.LED控制

基于FreeRTOS的STM32四轴飞行器: 四.LED控制 一.配置Com层二.编写驱动 一.配置Com层 先在Com_Config.h中定义灯位置的枚举类型&#xff1a; 之后定义Led的结构体&#xff1a; 定义飞行器状态&#xff1a; 在Com_Config.c中初始化四个灯&#xff1a; 在Com_Config.h外部声明…

RT-DETR融合YOLOv12中的R-ELAN结构

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《YOLOv12: Attention-Centric Real-Time Object Detectors》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2502.12524 代码链接&#xff1a;https://gitcode.com…

“深入浅出”系列之Linux篇:(13)socket编程实战+TCP粘包解决方案

从日常使用的APP&#xff0c;到背后支撑的各类服务器&#xff0c;网络通信无处不在&#xff0c;而socket作为实现网络通信的关键技术&#xff0c;更是开发者们必须掌握的核心知识。但在socket编程的道路上&#xff0c;TCP粘包问题宛如一只拦路虎&#xff0c;让无数开发者头疼不…

【计算机操作系统】操作系统的功能和目标

1、操作系统的功能和目标---作为系统资源的管理者 作为系统资源的管理者提供的功能&#xff1a; &#xff08;1&#xff09;处理机管理 &#xff08;2&#xff09;存储器管理 &#xff08;3&#xff09;文件管理 &#xff08;4&#xff09;设备管理 作为系统资源的管理者…

“深入浅出”系列之Linux篇:(10)基于C++实现分布式网络通信RPC框架

分布式网络通信rpc框架 项目是分布式网络通信rpc框架&#xff0c; 文中提到单机服务器的缺点&#xff1a; 硬件资源的限制影响并发&#xff1a;受限于硬件资源&#xff0c;聊天服务器承受的用户的并发有限 模块的编译部署难&#xff1a;任何模块小的修改&#xff0c;都导致整…

Aws batch task 无法拉取ECR 镜像unable to pull secrets or registry auth 问题排查

AWS batch task使用了自定义镜像&#xff0c;在提作业后出现错误 具体错误是ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. C…

机器学习之无监督学习

无监督学习&#xff08;Unsupervised Learning&#xff09;是机器学习的一个重要分支&#xff0c;其特点是在训练过程中不使用标签数据。与有监督学习不同&#xff0c;无监督学习的目标是从未标记的数据中发现隐藏的结构、模式或关系。无监督学习广泛应用于聚类、降维、异常检测…

自然语言处理:朴素贝叶斯

介绍 大家好&#xff0c;博主又来和大家分享自然语言处理领域的知识了。按照博主的分享规划&#xff0c;本次分享的核心主题本应是自然语言处理中的文本分类。然而&#xff0c;在对分享内容进行细致梳理时&#xff0c;我察觉到其中包含几个至关重要的知识点&#xff0c;即朴素…

HTML label 标签使用

点击 <label> 标签通常会使与之关联的表单控件获得焦点或被激活。 通过正确使用 <label> 标签&#xff0c;可以使表单更加友好和易于使用&#xff0c;同时提高整体的可访问性。 基本用法 <label> 标签通过 for 属性与 id 为 username 的 <input> 元素…

Ubuntu20.04双系统安装及软件安装(五):VSCode

Ubuntu20.04双系统安装及软件安装&#xff08;五&#xff09;&#xff1a;VSCode 打开VScode官网&#xff0c;点击中间左侧的deb文件下载&#xff1a; 系统会弹出下载框&#xff0c;确定即可。 在文件夹的**“下载”目录**&#xff0c;可看到下载的安装包&#xff0c;在该目录下…

SparkSQL全之RDD、DF、DS ,UDF、架构、资源划分、sql执行计划、调优......

1 SparkSQL概述 1.1 sparksql简介 Shark是专门针对于spark的构建大规模数据仓库系统的一个框架Shark与Hive兼容、同时也依赖于Spark版本Hivesql底层把sql解析成了mapreduce程序&#xff0c;Shark是把sql语句解析成了Spark任务随着性能优化的上限&#xff0c;以及集成SQL的一些…

Linux总结

1 用户与用户组管理 1.1 用户与用户组 //linux用户和用户组 Linux系统是一个多用户多任务的分时操作系统 使用系统资源的用户需要账号进入系统 账号是用户在系统上的标识&#xff0c;系统根据该标识分配不同的权限和资源 一个账号包含用户和用户组 //用户分类 超级管理员 UID…

【AI深度学习网络】卷积神经网络(CNN)入门指南:从生物启发的原理到现代架构演进

深度神经网络系列文章 【AI深度学习网络】卷积神经网络&#xff08;CNN&#xff09;入门指南&#xff1a;从生物启发的原理到现代架构演进【AI实践】基于TensorFlow/Keras的CNN&#xff08;卷积神经网络&#xff09;简单实现&#xff1a;手写数字识别的工程实践 引言 在当今…

Qt之QGraphicsView图像操作

QGraphicsView图像操作:旋转、放大、缩小、移动、图层切换 1 摘要 GraphicsView框架结构主要包含三个主要的类QGraphicsScene(场景)、QGraphicsView(视图)、QGraphicsItem(图元)。QGraphicsScene本身不可见,是一个存储图元的容器,必须通过与之相连的QGraphicsView视图来显…

【Azure 架构师学习笔记】- Azure Databricks (14) -- 搭建Medallion Architecture part 2

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (13) – 搭建Medallion Architecture part 1 前言 上文搭建了ADB 与外部的交互部分&#xff0c;本篇搭建ADB 内部配置来满足medallion 架构。…