当前位置:网站首页>滑動窗口系列-尋找最小覆蓋字串
滑動窗口系列-尋找最小覆蓋字串
2022-04-21 12:56:00 【slam讓我頭疼】
總結:
need容器中存放的是需要覆蓋的字串,包括字符和對應的字符數量
1.用最小覆蓋字符串在原字符串中的首字母比特置和最小覆蓋字符串的長度錶示最小覆蓋字符串;
2.左、右指針的含義是指向原字符串的左右比特置上的,是原字符串的一段數據;
3.window窗口中保存的是左、右指針所指數據段上符合要求的數據(在need容器中);
4.右指針往右進行數據的擴大,尋找可行解;左指針往右進行數據的縮小,尋找最優解;
5.指針變化的時候怎麼更新window窗口中的數據,要先根據need容器判斷當前指針指向的數據是否需要加入window(放入right所指的元素),或者當前window中
是否有元素需要移除(left所指的元素在當前window中)。
6.窗口收縮的判斷,通過設置valid,看是否已經包含所有要尋找的字符串,然後進行窗口的收縮。
class Solution {
public:
//怎麼錶示最小覆蓋字串
string minWindow(string s, string t) {
unordered_map<char, int > need;
unordered_map<char, int > window;
for(auto value:t) need[value]++;//如果該key不存在的話,會自動創建該key,並把map[key]賦值為0
int left=0,right=0;
int valid=0;//錶示已經滿足要求的字符個數
//通過字符串的首字符的比特置和字符串的長度來確定最小覆蓋字串
int start=0;
int Len=INT_MAX;
while(right<s.size()){
//尋找可行解
//取出字符放入到窗口,更新窗口數據
char c=s[right];
right++;//窗口滑動
if(need.count(c)){//如果是需要的字符就把它放入到窗口中,並判斷該字符是否數量已經滿足要求
window[c]++;
if(window[c]==need[c]){//window中維護的是左、右指針間的和need容器中元素相同的量
valid++; //valid控制每個字符都達到要求了
}
}
//尋找最優解,開始收縮窗口
while(valid==need.size()){
if(right-left<Len)
{
start=left;
Len=right-left;
}
//left右移
char c=s[left];//判斷left指的元素是否在窗口中
left++;
if(need.count(c)){
if(need[c]==window[c]){//注意這裏和加入元素的時候的順序是相反的
valid--;
}
window[c]--;
}
}
}
return Len==INT_MAX?"":s.substr(start,Len);
}
};
版权声明
本文为[slam讓我頭疼]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204211253102732.html
边栏推荐
- The course of qiniu business school allows Xiaobai to open an account and make new debts. Is it safe?
- Revit secondary development - contact filtration (phase 17)
- Revit二次开发——多管道线性标注(第十八期)
- Revit二次开发——创建和切换标记(第十六期)
- Decompilation of Revit secondary development
- 2022语言与智能技术竞赛再升级,推出NLP四大前沿任务
- Meichuang technology was invited to carry out data security training for Haidian District academy of Educational Sciences
- Go language reflection
- 2022年监理工程师合同管理练习题及答案
- With monthly sales exceeding 10 million, how can "Jiaoxia" become a popular manufacturing machine in the new sunscreen era?
猜你喜欢

自媒体如何打造爆文,提升阅读量

4年Android开发13K,刷完这份1307页Android-面试全套真题解析,跳槽涨薪15K

2022年G3锅炉水处理上岗证题目及答案

Eight common probability distribution formulas and visualization

上个网课都能被AI分析“在走神”,英特尔这个情绪检测AI火了

制造业数字化转型存在哪些问题

2022年4月中国数据库排行榜:春风拂面春意暖,分数回升四月天

Meichuang technology was invited to carry out data security training for Haidian District academy of Educational Sciences

主从复制--03---同步数据一致性问题
AES automatically generates Base64 key encryption and decryption
随机推荐
Go language reflection
业内视频超分辨率新标杆,快手&大连理工研究登上CVPR 2022
2022年4月中国数据库排行榜:春风拂面春意暖,分数回升四月天
Call for Papers | IEEE/IAPR IJCB 2022 会议
挖财的证券账户怎么开户?在券商开户是不是比较安全一些?
Revit二次开发——创建墙体(2)(第十一期)
Convert m3u8 format to MP4 through fmpeg
Building QML applications
AES自动生成base64密钥加密解密
2022年初级会计职称考试会计实务练习题及答案
OJ每日一练——分段函数
53w字!阿里首推系统性能优化指南太香了,堪称性能优化最优解
Mysql database operation statement exercise
L2-013 红色警报 (25 分)
Redis - breakdown, penetration, avalanche
2022年G3锅炉水处理上岗证题目及答案
框架的灵魂------反射
常见的8个概率分布公式和可视化
计算一年中第几天,C语言实现
[source code analysis] encoding in style: a stylegan encoder for image to image translation