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

76. 最小覆盖子串 Java版

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:数据库

JavaEE专栏:JavaEE

软件测试专栏:软件测试

关注博主带你了解更多知识

Problem: 76. 最小覆盖子串

解析: 

先把 ss 和 tt 字符串转化为字符数组

char[] s = ss.toCharArray();

char[] t = tt.toCharArray();

再用数组模拟哈希表,统计各字符出现个数/频次, 为什么选数组模拟,而不是直接选用哈希表, 因为数组的时间复杂度为O(1), 哈希表时间复杂度虽然也是O(1),但是遇到哈希冲突时,时间复杂度就会变为O(n)

创建hash1数组 遍历 t数组字符出现个数/频次 , 并统计字符种类(kinds)

创建hash2数组 统计窗口中字符出现次数.频次

开始遍历 s数组 创建left right count 分别为0

进窗口前提:

char in = s[right] hash2[in]++

进窗口: 比较hash1和hash2字符是否相等, 如果相等种类 count ++

当 窗口hash2种类数 等于 hash1种类数时 说明此时窗口是一个可能覆盖的子串,但是我们要求的是最小子串

判断 如果 窗口长度 < minlen

则更新begin = left , minlen = right - left+1, 求包含所有t字符的最小窗口

出窗口前提: char out = s[left] ,left++

出窗口: if (hash2[out] == hash1[out]) count --

hash2[out]--

最后统计结果:

如果bengin 为起始-1 时 直接返回空串

否则 返回 begin位置 到 begin+minlen 位置字符串

复杂度分析:

代码: 

class Solution {public String minWindow(String ss, String tt) {char[] s = ss.toCharArray();char[] t = tt.toCharArray();if(ss.equals(tt)) return ss;int[] hash1 = new int[200]; //统计t字符出现的频次int kinds = 0;for(char ch : t){if(hash1[ch] == 0) kinds++;hash1[ch]++;}int[] hash2 = new int[200];//统计窗口中字符频次int minlen = Integer.MAX_VALUE, begin = -1;for(int left = 0, right = 0,count = 0; right < s.length; right++){char in = s[right];hash2[in]++;//进窗口+维护if(hash2[in] == hash1[in]) count++;while(kinds == count){//判断if(right - left+1 < minlen){//更新结果begin = left;minlen = right-left+1;}char out = s[left];left++;//出窗口+维护if(hash2[out] == hash1[out]) count--;hash2[out]--;}}if(begin == -1) return new String();else return ss.substring(begin,begin+minlen);}
}

http://www.xdnf.cn/news/13232.html

相关文章:

  • 精准夹持,稳定控制:IXTUR气控永磁铁选型全攻略(涵盖MAP、MRP与LI-120系列)
  • 电针联手神经干细胞外泌体:破解围绝经期抑郁症的海马修复密码【AbMole】
  • 输入与输出(I/O):文件与数据流的处理艺术!
  • PHP使用经纬度获取两个位置的距离以及范围查询
  • Deepseek大模型私有化部署
  • 手游刚开服就被攻击怎么办?如何防御DDoS?
  • 香港虚拟主机安装WordPress
  • vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能
  • 学习日记-day25-6.9
  • 分布式系统常见的四种数据一致性模型
  • 即梦图片 3.0 智能参考全量上线,开启 AI 设计零门槛新时代
  • 【链接、装载和库】三、目标文件详解
  • 什么是Java bean的依赖注入
  • 在 Figma 中导出图标为 Iconfont
  • img src 图片缓存问题
  • [软件测试]:什么软件测试?如何设计测试用例?
  • 【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
  • vue3 简易的pc端音频播放器组件
  • 编写整洁的python之装饰器
  • Python环境安装与虚拟环境配置详解
  • 打开GitHub网站因为网络原因导致加载失败问题解决方案
  • 什么是OLAP?OLAP具体有哪些应用?
  • 【旧题新解】第 3 集 对齐输出
  • MySQL-事务(TRANSACTION-ACID)管理
  • FEMFAT许可使用监控工具
  • deepseek: 反汇编 难点+ 工具
  • 数控滑台的的发展:映射了机械制造业的技术进步轨迹
  • 数字ic后端设计从入门到精通6(含fusion compiler, tcl教学)repeater详解
  • 站群服务器的应用场景都有哪些?
  • Promise 链式调用:让异步编程更优雅