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

力扣 之 最小覆盖子串(变长滑动窗口,越短越好)

文章目录


76.最小覆盖子串
在这里插入图片描述

  • 思路分析
    • 一般思路:一开始看到这个题目,可能大家的第一个印象就是,就是需要不断枚举出s中所有的子串,然后再统计里面的各种字符的数量和种类,然后再与这个字符t作比较,但是这样的话,这个思路就十分宽泛,根本就是无从下手
    • 需要思考什么?
      • 枚举顺序:这个枚举的话,还是讲求一个顺序性,我们通过固定左端点,枚举右端点的思路,可以比价有效的进行一个枚举
      • 判断是否满足?: 对于是否满足,那么就是对于子串和字符串t来说,至少t中对应种类和数量的字符要满足
      • 更新方式:对于满足之后的更新主要是通过移动这个窗口的左端点来解决

思路1:通过两个向量,由于题目说了,存在大小写两种情况,那么就是我们可以开两个128长度的向量,分别统计两个字符串中字符的数量,那么这样的时候复杂度也就是O(128m+n)

class Solution {bool issame(vector<int> stores,vector<int> storet){for (int i = 'A';i <= 'Z';i++){if (stores[i] < storet[i]){return false;}}for (int i = 'a'; i <= 'z';i++){if (stores[i] < storet[i]){return false;}}return true;
}public:string minWindow(string s, string t) {vector<int> stores(128),storet(128);// 先存储字符串t的情况for (char c:t){storet[c]++;}int ansleft = -1,ansright = s.length(),left = 0;for (int right = 0; right < s.length();right++){stores[s[right]]++;while (issame(stores,storet)){if (right - left < ansright - ansleft){ansleft = left;ansright = right;}stores[s[left]]--;left++;}}return ansleft < 0 ? "" : s.substr(ansleft, ansright - ansleft + 1);}
};

思路2:(思路1的优化)

  • 使用变量less统计字符串t中不同种类的字符串的数量,并且定义这个向量store[i] = storet[i] - stores[i]
class Solution {
public:string minWindow(string s, string t) {vector<int> store(128);int less = 0;for (char c:t){if (store[c] == 0){less ++;}store[c] ++;}int m = s.size();int ansleft = -1,ansright = m,left = 0;// 定义的这个 cnt[i] 为字符 i 还需满足的数量for (int right = 0;right < m; right ++){store[s[right]] -- ;if (store[s[right]] == 0){// 刚好满足less --;}while (less == 0){//全部都满足if (right - left < ansright - ansleft){ansleft = left;ansright = right;}// 需要检查移动左端点对less的影响if (store[s[left]] == 0){less ++;}store[s[left]] ++;left++;}}return ansleft < 0 ? "" : s.substr(ansleft ,ansright - ansleft + 1);}
};
http://www.lryc.cn/news/602680.html

相关文章:

  • 电磁兼容五:仿真技术
  • Mac安装navicat17版本教程mac下载Navicat Premium for Mac v17.1.9【好用】
  • 微算法科技(NASDAQ:MLGO)利用基于区块链的机器学习模型进行交易分类,实现交易数据的匿名化
  • redis数据库的四种取得 shell方法
  • 安宝特案例丨户外通信机房施工革新:AR+作业流技术破解行业难题
  • 免费版酒店收银系统弹窗在押金原路退回流程中的应用价值探究 ——仙盟创梦IDE
  • 设计模式(二十一)行为型:状态模式详解
  • python生成 requirement.txt 文件
  • fchown/fchownat系统调用及示例
  • 技术总结|如何使用提升 strlen 的性能?
  • lesson26-2:使用Tkinter打造简易画图软件优化版
  • 数据链路层 和 ARP协议
  • MQTT的原理
  • 华为Huawei 6730交换机查看接口收发光命令 transceiver
  • 9.c语言常用算法
  • Anaconda创建环境报错:CondaHTTPEFTOT: HTTP 403 FORBIDDEN for url
  • Linux中配置haproxy
  • gitlab 在线合并分支a-分支b,解决冲突后,反向合并分支b-分支a
  • 数据结构——图(二、图的存储和基本操作)
  • 人机交互打字游戏
  • Leetcode——11. 盛最多水的容器
  • 力扣-39.组合总和
  • PhpStorm + PHP8.1 + XDebug3 实现断点调试(亲测可用)
  • 面试问题收集——卷积神经网络
  • 从 “看天吃饭” 到 “精准可控”:边缘计算网关如何引爆智慧农业种植变革?
  • 计算机毕设分享-基于SpringBoot的健身房管理系统(开题报告+前后端源码+Lun文+开发文档+数据库设计文档)
  • 服务器多线主要是指什么?
  • 服务器查日志太慢,试试grep组合拳
  • 数据中心入门学习(四):服务器概述与PCIe总线
  • 数据结构面经