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

算法18.0

76. 最小覆盖子串 - 力扣(LeetCode)

审题要理解清楚 

解法1:

依旧暴力解法

枚举所有的情况 然后找到那个长度最小的字符串  

解法2:优化暴力解法   

这道题的算法原理有点类似算法14.0的思路  构建两个哈希表然后维护count

为了不失一般性  依旧一条横线表示题目的情况 

我们找到一个区间符合情况后   开始考虑其他遍历情况(也就是双指针的移动情况)

当left右移一步  right需不需要回来再走一次

这个时候需要分情况讨论了  如果没移动前的left的那个位置的元素的个数大于hash1里面

说明这个时候 移动了也没有问题  right不需要回来再走一次

如果刚刚够或者小于 那么移动了会影响  right也没有必要回来再走一次  直接right++ 去加入新的i情况  

这个时候发现 left和right都往一个方向走 联想到滑动窗口

思考滑动窗口的具体步骤不清晰的时候 可以尝试以暴力解法起手去尝试着寻找思路

判断:hash2的有效字符大于等于hash1的时候 才出窗口

优化:判断的时候 check    

用变量标记一下有效字符的个数  但是这个和算法14.0中count的意义是不一样的

这里的count是比较的有效字符的种类

如果统计的是有效字符的个数的话语   是不行的  详情看下图

具体怎么统计种类 还是在进窗口和出窗口的时候维护

细节问题:

维护count的时候 发现不能用数组来维护  

所以用一个新的变量kinds 表示字符的种数

解法3:类似使用算法14.0的思路

下面是题目、效果图和代码:

class Solution {public String minWindow(String ss, String tt) {char[] s = ss.toCharArray();char[] t = tt.toCharArray();int[] hash1 = new int[128];int kinds = 0;for(char ch:t) {//统计t里面的频次 并找出了有多少种字符//    if(hash1[ch] == 0) kinds++;//    hash1[ch]++;if(hash1[ch]++ == 0) kinds++;}int[] hash2 = new int[128];//用来统计窗口中字符出现的频次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++;//如果hash1和hash2 说明我们加入了一个有效字符// //进窗口+维护countif(++hash2[in]==hash1[in]) count++; //上面两行代码可以简化成这一行 哈哈while(kinds==count){//判断//更新结果if(right-left+1<minlen){begin = left;minlen=right-left+1;}char out = s[left++];//移除窗口的时候记得移动一位//  if(hash2[out] == hash1[out]) count--;//  hash2[out]--;if(hash2[out]-- == hash1[out]) count--;//出窗口+维护count}}if(begin == -1) return new String();else return ss.substring(begin,begin+minlen);}
}
//xiyu251024&1#2*8

http://www.dtcms.com/a/524656.html

相关文章:

  • RHCA - DO374 | Day02:管理内容集和执行环境
  • 网站建设明细价格表包头seo营销公司
  • JAVA 锁机制【待完善】
  • 不平均的分治——根号分治
  • USP-(DeepSpeed-Ulysses-Attention and Ring-Attention)
  • Ubuntu部署集群环境(3台)
  • VoCo-LLaMA: Towards Vision Compression with Large Language Models 译读笔记
  • 国网北京电力建设研究院网站惠州网站建设电话
  • 鹤壁市住房和城乡建设局网站上线了建站教程
  • centos8.5运行ai00-server报错`GLIBC_2.39‘ not found,解决方法
  • 冷换仓的隐性代价:从安全策略到地址信誉体系的重新思考
  • 如何用Vue CLI 创建 Vue 项目
  • 网站开发专业前景完整php网站开发
  • 企业建网站110平米三室一厅简装图片
  • CAS汽车固件签名:从“完成签名”到“安全治理”的演进之路
  • 免费手机网站模板sem竞价推广怎么做
  • 企业数字化转型的关键一步:打通研发全流程
  • Unity 资源导出的问题,依赖关系过多。
  • 网站开发公司内部数据字典深圳网站建设设计公司
  • 网站建设维护公司地址如何做好网站内容
  • STM32_bug总结-运行函数在SystemInit之后就卡死
  • 基于高光谱成像技术的烟叶含水率检测研究进展
  • 聊城网站推广网站可以换域名吗
  • 一个网站 两个域名淄博公司网站建设价格
  • VBA数据结构终极对决:性能实测与行业应用指南
  • 解码Linux文件IO之JPEG图像原理与应用
  • “短小精悍”的边缘AI算力利器:超微SYS-E403-14B-FRN2T服务器评测
  • Gradio全解14——使用Gradio构建MCP的服务器与客户端(4)——Python包命令:uv与uvx实战
  • php是网站开发的语言吗怎么做好市场宣传和推广
  • 做cms网站步骤广东手机网站建设哪家好