欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 76. 最小覆盖子串

76. 最小覆盖子串

2025/9/18 10:59:14 来源:https://blog.csdn.net/s773364/article/details/146923594  浏览:    关键词:76. 最小覆盖子串

leetcode Hot 100系列

文章目录

  • 一、核心操作
  • 二、外层配合操作
  • 三、核心模式代码
  • 总结


一、核心操作

  1. 判断是否包含函数
  2. 先计算出t的哈希表,再通过滑动窗口遍历s,每次遍历s的元素都将其加入s的哈希表中,只要s的哈希表包含了t的哈希表,则移动左端,如果right-left小于ansRight-ansLeft则更新
  3. 最终如果ansLeft为负数,则返回“”,否则取ansRight和ansLeft的子串

提示:小白个人理解,如有错误敬请谅解!

二、外层配合操作

  1. 哈希表为128位数组

三、核心模式代码

代码如下:

class Solution {
public:bool is_covered(std::vector<int>& s_cnt, std::vector<int>& t_cnt){for(int i='A';i<='Z';i++){if(s_cnt[i]<t_cnt[i])return false;}for(int i='a';i<='z';i++){if(s_cnt[i]<t_cnt[i])return false;}return true;}std::string minWindow(std::string s, std::string t) {std::string res;int m=s.size();int n=t.size();std::vector<int> s_cnt(128,0);std::vector<int> t_cnt(128,0);if(m<n)return "";int ansLeft=-1,ansRight=m;int right=0;int left=0;for(int i=0;i<n;i++)t_cnt[t[i]]++;for(;right<m;right++){   s_cnt[s[right]]++;while(is_covered(s_cnt,t_cnt)){if((right-left)<(ansRight-ansLeft)){ansLeft=left;ansRight=right;}s_cnt[s[left++]]--;}}if(ansLeft<0)return "";return s.substr(ansLeft,ansRight-ansLeft+1);}
};

总结

  1. 只要包含,则一直移动左边

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词