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

珠海网站建易搜互联千锋教育的官网

珠海网站建易搜互联,千锋教育的官网,经典重庆区县论坛,手机h5页面怎么制作题目要求 给定两个字符串 s 和 t,找到 s 中涵盖 t 所有字符的最小子串。如果不存在,则返回空字符串。 示例1 输入:s "ADOBECODEBANC", t "ABC" 输出:"BANC" 解释:最小覆盖子串 &qu…

题目要求

给定两个字符串 st,找到 s 中涵盖 t 所有字符的最小子串。如果不存在,则返回空字符串。

示例1

输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
解释:最小覆盖子串 "BANC" 包含 t 中的 'A'、'B' 和 'C'。

示例2

输入:s = "a", t = "a"
输出:"a"
解释:整个字符串 s 是最小覆盖子串。

示例3

输入:s = "a", t = "aa"
输出:""
解释:t 中两个字符 'a' 均应包含在 s 的子串中,没有符合条件的子字符串。

实际应用

寻找字符串 s 中涵盖字符串 t 所有字符的最短子串的问题。

文本处理领域

场景:在文本编辑器中,用户想要快速找到包含特定关键词或短语的最小文本范围。

例子:假设你正在处理一个大型文档,想要找到包含 errorwarning 的最小段落。使用滑动窗口算法,可以快速定位到包含这两个词的最短文本范围,从而提高信息检索的效率。

数据流处理领域

场景:在实时数据监控系统中,需要识别包含特定特征的最短数据片段。

例子:在网络流量监控中,系统需要实时分析数据包,以识别包含特定攻击特征(如 SYNACK 标志位)的最短数据片段。滑动窗口算法可以帮助快速找到这些特征,从而及时采取措施防止潜在的网络攻击。

滑动窗口法

思想

滑动窗口法通过维护一个左右指针表示的窗口,在字符串 s 上滑动。

右指针不断右移扩大窗口,直到窗口内包含 t 中的所有字符。

随后,左指针右移缩小窗口,寻找满足条件的最短子串。

期间用数组或哈希表记录字符频率,判断窗口是否符合要求。

该算法的优势在于它能够将嵌套循环问题优化为线性时间复杂度问题,在处理大数据时效率显著。

哈希表记录字符频率

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;string minWindow(string s, string t)
{unordered_map<char, int> need, window;for (char c : t)need[c]++;int left = 0, right = 0;// 记录当前窗口中满足条件的字符种类数int valid = 0;// 记录最小覆盖子串的起始索引及长度int start = 0, length = INT_MAX;while (right < s.size()){// c 是将移入窗口的字符char c = s[right];// 右移窗口,right指向窗口的下一个位置right++;// 进行窗口内数据的一系列更新if (need.count(c)){window[c]++;if (window[c] == need[c])valid++;}// 判断左侧窗口是否要收缩while (valid == need.size()){// 在这里更新最小覆盖子串if (right - left < length){start = left;length = right - left;}// d 是将移出窗口的字符char d = s[left];// 左移窗口left++;// 进行窗口内数据的一系列更新if (need.count(d)){if (window[d] == need[d])valid--;window[d]--;}}}// 返回最小覆盖子串return length == INT_MAX ? "" : s.substr(start, length);
}int main()
{string s = "ADOBECODEBANC";string t = "ABC";cout << minWindow(s, t) << endl;return 0;
}

数组记录字符频率

数组代替哈希表记录字符频率可以提升访问速度,因为字符范围有限,数组索引对应字符,访问时间固定。但数组难以直接确定不重复的元素个数,所以用 valid 记录符合 need 条件的字符种类数,确保窗口中字符及其数量满足要求。

#include <iostream>
#include <string>
#include <vector>
using namespace std;string minWindow(string s, string t)
{vector<int> need(128, 0);vector<int> window(128, 0);for (char c : t)need[c]++;int left = 0, right = 0;// 记录窗口中满足need条件的字符个数int valid = 0;// 记录最小覆盖子串的起始索引及长度int start = 0, length = INT_MAX;while (right < s.size()){// c 是将移入窗口的字符char c = s[right];// 右移窗口,right指向窗口的下一个位置right++;// 进行窗口内数据的一系列更新if (need[c]){window[c]++;if (window[c] <= need[c])valid++;}// 判断左侧窗口是否要收缩while (valid == t.size()){// 在这里更新最小覆盖子串if (right - left < length){start = left;length = right - left;}// d 是将移出窗口的字符char d = s[left];// 左移窗口left++;// 进行窗口内数据的一系列更新if (need[d]){if (window[d] == need[d])valid--;window[d]--;}}}// 返回最小覆盖子串return length == INT_MAX ? "" : s.substr(start, length);
}
int main()
{string s = "ADOBECODEBANC";string t = "ABC";cout << minWindow(s, t) << endl;return 0;
}

时间复杂度

通常为 O(m + n),其中 mn 分别是字符串 st 的长度。

推荐一下

https://github.com/0voice

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

相关文章:

  • 乐清做网站建设公司python 做爬虫网站
  • 网站建设的时候如何上传图片我要自学网app
  • 基于windows2019域控搭建sqlsever2019 Always On
  • 网站设计风格介绍南漳网站建设
  • 石家庄网站建设推广公司电话河南工程建设网
  • php 网站管理系统高校门户网站开发
  • 网站运营总结网络营销推广公司找哪家
  • 网站建设方案申请报告九一人才网赣州
  • 装修设计效果图网站网站做行测题
  • RAG架构(检索增强生成)与向量数据库
  • 北京网站建设首选石榴汇网站验证码原理
  • 招聘网站开发方案doc哈巴河网站制作
  • 网站如何做交换链接微信运营商人工电话
  • 吴江区城乡建设管理局网站海南省住房和建设厅网站首页
  • asp sqlserver做网站网站怎么做分时
  • jEasyUI 创建分割按钮
  • 珠海网站建设网络推广wordpress占用内存
  • 【机器学习入门】8.2 主成分分析:一文吃透主成分分析(PCA)—— 从原理到核心逻辑
  • 如何做链接淘宝客的网站做3d同人的网站是什么
  • 旅游网站开发公司wordpress彩色标签固定宽度代码
  • 做网站搜索如何显示官网阿里巴巴网站建设规划
  • 大连模板网站制作哪家好响应式网站建设的好处
  • 门户网站建设的书籍wordpress 去掉顶部
  • 陕西省住房和城乡建设网站找别人做网站可以提供源码吗
  • 免费行情软件app网站大全下载有图片硬件定制
  • 汽车网站的建设方向一起做网店货源
  • 做网站怎么写预算怎么样做跨境电商
  • 做动效很好的网站网站建设有哪些软件有哪些方面
  • Day 1 R基础
  • 站长之家怎么用wordpress 论坛 整合