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

力扣76. 最小覆盖子串(滑动窗口)

Problem: 76. 最小覆盖子串

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

1.定义两个map集合need和window(以字符作为键,对应字符出现的个数作为值),将子串t存入need中;
2.定义左右指针left、right均指向0(形成窗口),定义int类型变量len记录最小窗口长度,valid记录当前窗口否存最短子串中的字符个数
3.向右扩大窗口,遍历到到的字符c如果在need中时,window[c]++,同时如果window[c] == need[c],则valid++
4.如果valid == need.size(),则表示可以开始收缩窗口,并更新最小窗口禅读(如果移除的字符在need中,同时window[d] == need[d],则valid–,window[d]–);

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为字符串 s s s的长度

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution {
public:/*** Two pointer** @param s Given string* @param t Given string* @return string*/string minWindow(string s, string t) {unordered_map<char, int> need;unordered_map<char, int> window;for (char c: t) {need[c]++;}int left = 0;int right = 0;int valid = 0;// Records the starting index and length of the minimum overlay substringint start = 0;int len = INT_MAX;while (right < s.size()) {//c is the character moved into the windowchar c = s[right];// Move the window rightright++;// Perform some column updates to the data in the windowif (need.count(c)) {window[c]++;if (window[c] == need[c]) {valid++;}}// Determine whether to shrink the left windowwhile (valid == need.size()) {// Update the minimum overlay substringif (right - left < len) {start = left;len = right - left;}//d is the character to be moved out of the windowchar d = s[left];// Move the window leftleft++;// Perform some column updates to the data in the windowif (need.count(d)) {if (window[d] == need[d]) {valid--;}window[d]--;}}}// Returns the minimum overlay substringreturn len == INT_MAX ? "" : s.substr(start, len);}
};
http://www.lryc.cn/news/311398.html

相关文章:

  • 使用华为云云函数functiongraph
  • Android logcat系统
  • android 使用协程CoroutineScope 实现定时器
  • 【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)
  • UnityShader——09数学知识3
  • langchain学习笔记(九)
  • 周处除三害在线资源最新电影1080p高清
  • STM32CubeIDE基础学习-新建STM32CubeIDE基础工程
  • R语言简介|你对R语言了解多少?
  • Android的硬件接口HAL
  • 【js】数组的常用方法
  • 08. Nginx进阶-Nginx动静分离
  • RPC--一起学习吧之架构
  • 服务器后端是学习java还是php
  • DCFL: for Oriented Tiny Object Detection
  • 代码学习记录11
  • 【LeetCode】第 387 场周赛
  • 基于 Vue3打造前台+中台通用提效解决方案(下)
  • Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版
  • 高效办公软件中哪个提醒待办事项更有效
  • 牛客练习赛122
  • 软考复习调整策略和学习计划!
  • 1小时网络安全事件报告要求,持安零信任如何帮助用户应急响应?
  • mysql使用连接池
  • 06. Nginx进阶-Nginx代理服务
  • STM32 (1)
  • Spring初始(相关基础知识和概述)
  • 【Swift 周报 第四十七期
  • STM32(16)使用串口向电脑发送数据
  • 利用大模型技术进行测试用例推荐如何实现