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

网站设计培训网站建设合同2018

网站设计培训,网站建设合同2018,广州市做民宿什么网站比较好,环境艺术设计最好的大学1. 题目链接 LeetCode 76. 最小覆盖子串 2. 题目描述 给定字符串 s 和 t,要求找到 s 中最小的窗口,使得该窗口包含 t 的所有字符(包括出现次数)。若不存在,返回空字符串。 示例: 输入:s &quo…
1. 题目链接

LeetCode 76. 最小覆盖子串


2. 题目描述

给定字符串 st,要求找到 s最小的窗口,使得该窗口包含 t 的所有字符(包括出现次数)。若不存在,返回空字符串。
示例
输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"(最短窗口包含 ABC,且长度最短)。


3. 示例分析

s = "ADOBECODEBANC", t = "ABC" 为例:

  1. 滑动窗口法:

    • right 移动到索引 5 时,窗口 "ADOBEC" 包含 ABC,记录长度为 6。
    • 继续移动 right 到索引 10,窗口缩小为 "BANC",长度为 4,更新为最终结果。
  2. 暴力枚举法:

    • 枚举所有子串,例如 [0,5][0,6][9,12],逐个检查是否包含 t 的所有字符。

4. 算法思路

滑动窗口法

  1. 哈希表统计
    • hash1 统计 t 中字符的出现次数。
    • hash2 统计当前窗口内字符的出现次数。
  2. 动态窗口调整
    • 右指针扩展:将字符加入窗口,若其出现次数等于 t 中的次数,增加有效计数 count
    • 左指针收缩:当窗口包含 t 的所有字符时,尝试缩小窗口并更新最小长度。
  3. 结果记录:每次窗口满足条件时,检查是否为最短窗口。

暴力枚举法

  • 枚举所有可能的子串起点 i 和终点 ji ≤ j),检查子串是否包含 t 的所有字符。

5. 边界条件与注意事项
  1. 字符重复性:窗口需满足 t 中字符的出现次数,而不仅是存在性。
    • 例如 t = "AA",窗口必须包含至少两个 A
  2. 无效输入:若 s 长度小于 t,直接返回空。
  3. 哈希表初始化:需覆盖所有 ASCII 字符(代码中使用 hash[128])。
  4. 最小窗口更新:需在每次窗口合法时实时更新,避免遗漏更优解。

6. 代码实现
class Solution {
public:string minWindow(string s, string t) {int ns = s.size(), nt = t.size();if (ns < nt) return "";int hash1[128] = {0}; // 统计t的字符频次int kinds = 0;        // t中不同字符的种类数for (char ch : t) {if (hash1[ch]++ == 0) kinds++;}int hash2[128] = {0}; // 窗口内字符频次int left = 0, count = 0, min_len = INT_MAX, begin = -1;for (int right = 0; right < ns; right++) {char in_ch = s[right];hash2[in_ch]++; // 当窗口内该字符频次首次满足t的要求时,增加countif (hash2[in_ch] == hash1[in_ch]) count++;// 当窗口包含t的所有字符时,尝试缩小窗口while (count == kinds) {// 更新最小窗口if (right - left + 1 < min_len) {min_len = right - left + 1;begin = left;}// 移除左边界字符char out_ch = s[left++];// 若移除后导致频次不足,减少countif (hash2[out_ch]-- == hash1[out_ch]) count--;}}return (begin == -1) ? "" : s.substr(begin, min_len);}
};

在这里插入图片描述


7. 暴力枚举法与滑动窗口法对比图表

对比维度暴力枚举法滑动窗口法
核心思想枚举所有子串,逐一检查是否包含 t 的所有字符。动态维护窗口,仅在窗口不满足条件时扩展,满足条件时收缩以寻找最优解。
时间复杂度O(n² * m)(n为s长度,m为t长度,需遍历所有子串并检查字符频次)。O(n)(每个字符被左右指针各访问一次)。
空间复杂度O(1)(使用固定大小的哈希表)。O(1)(哈希表大小为128,常数空间)。
实现方式双重循环枚举子串,内层循环统计字符频次。单层循环扩展右指针,内层循环收缩左指针。
适用场景极小规模数据(n ≤ 100)。大规模数据(n ≤ 1e5)。
优点逻辑简单,直接穷举所有可能性。时间复杂度最优,适用于大规模输入。
缺点数据规模大时性能极差(n=1e4时需1e8次操作)。需精确维护哈希表状态(如count增减逻辑)。
http://www.dtcms.com/wzjs/554235.html

相关文章:

  • 给几个那方面网站网址php招生网站开发
  • 用html做网站山东春季高考网站建设
  • 不需要备案如何做网站在新西兰做兼职的网站
  • 购物类网站都有哪些模块网站备案后改域名
  • 电子产品网站建设策划书国展做网站的公司
  • 福田附近公司做网站建设多少钱做的网站没流量
  • php网站登录系统怎么做建设游戏运营网站开展工作
  • 三明网站建设公司定陶网站建设
  • 门户网站做免费相亲的建设商务网站的费用
  • 烟台网站建设哪家服务好买产品做企业网站还是博客
  • 网站空间维护工程建设教育网站
  • 网站商城的公司运营结构wordpress 怎么使用
  • 室内设计网站大全网站php企业网站开发方案
  • 全能优化型网站烟台seo快速排名
  • php制作网站开发微擎小程序
  • 测量为什么要建站无锡网站app微信号
  • 网站建设前端做网站seo推广公司
  • 佛山便宜网站建设网站收录一键提交
  • 网站整体设计意图及其功能网站建设好吗
  • 公司旅游视频网站模板免费下载建设银行信用卡被钓鱼网站骗了15000
  • 什么是wap网站wordpress镶嵌网页
  • 北京微信公众号成都seo排名
  • 编程外包seo排名点击手机
  • 写作网站推荐建设人行官方网站下载
  • 网站运营每天做的昆明专门做网站
  • wordpress搭建小说站楼盘 东莞网站建设
  • 基于django网站开发课设报告怎么定义自豪地采用WordPress
  • 美食网站建设服务策划书wordpress文档可以下载吗
  • 中国采购与招标网官方网站泰安建设厅网站
  • 南昌网站建设网站推广网站开发也需要源码吗