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

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

文章目录


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.xdnf.cn/news/16573.html

相关文章:

  • 历史版本的vscode下载地址
  • 数据处理工具是做什么的?常见数据处理方法介绍
  • C++ 哈希算法、贪心算法
  • Android15广播ANR的源码流程分析
  • Linux系统Centos7 安装mysql5.7教程 和mysql的简单指令
  • rhel9.1配置本地源并设置开机自动挂载(适用于物理光驱的场景)
  • 在 Windows 系统 下直接使用了 Linux/macOS 的环境变量设置语法 PLATFORM=android
  • 图像处理第三篇:初级篇(续)—— 照明的理论知识
  • 问题大全【1】
  • Ansible提权sudo后执行报错
  • STM32——寄存器映射
  • Day22-二叉树的迭代遍历
  • NAS远程访问新解法:OMV与cpolar的技术协同价值
  • 浏览器安全演进:从裸指针到 raw_ptr 的实践与思考
  • QGIS基于规则的道路分级制图及Leaflet集成展示实例
  • 日志分析-windows日志分析base--笔记ing
  • 数论1.01
  • 【实时Linux实战系列】在实时应用中进行负载均衡
  • Python day27
  • 【硬件】LVGL
  • 时序数据基座升维:Apache IoTDB 以“端边云AI一体化”重构工业智能决策
  • Java 大视界 -- 基于 Java 的大数据实时流处理在智能电网分布式能源接入与电网稳定性保障中的应用(368)
  • 基于黑马教程——微服务架构解析(二)
  • OpenI x SCNet “智能超算”创新应用挑战赛:实践阶段1和阶段2 部署Deepseek推理模型
  • 图片格式转换
  • AR技术赋能工业设备维护:效率与智能的飞跃
  • 【数据结构初阶】--二叉树(三)
  • 使用signal信号机制 + backtrace函数打印出程序崩溃后的堆栈信息
  • Flutter在购物场景中BLoC的应用
  • MySQL面试题及详细答案 155道(001-020)