字符串的最小窗口问题
来源:互联网 发布:免费h5页面制作软件 编辑:程序博客网 时间:2024/06/18 16:45
给定两个字符串T和S,找出在S中包含字符串T的最小子字符串,要求时间复杂度为O(n)。
如果不存在最小窗口,则返回”“;
例如,
S = "ADOBECODEBANC"
T = "ABC"
返回的最小窗口是"BANC"
.
实验的代码如下所示:
#include<iostream>#include<string>#include<vector>using namespace std;string minWindow(string &S, string &T){int Slen = S.length();int Tlen = T.length();if (Slen < Tlen || T.empty()){return "";}vector<int> ToBeFind(128, 0);vector<int> Found(128, 0);for (int i = 0; i != Tlen; ++i){ToBeFind[T[i]]++;}int Count = Tlen;int first = 0;int last = 0;int minfirst = 0;int minlast = 0;int minlength = INT_MAX;Found[S[0]]++;if (Found[S[0]] <= ToBeFind[S[0]])//先比较第一个字符是为了处理T为单个字符的特例{Count--;}while (true){if (Count == 0){while (Found[S[first]] > ToBeFind[S[first]]){Found[S[first]] --;first++;}int length = last - first + 1;if (length < minlength){minfirst = first;minlast = last;minlength = length;}}if (last < Slen){last++;Found[S[last]]++;if (Found[S[last]] <= ToBeFind[S[last]]){Count--;}}else{break;}}if (minlength == INT_MAX){return "";}return S.substr(minfirst, minlength);}int main(){string S1 = "ADOBECODEBANC";string S2 = "ABC";string S3 = "A";cout << minWindow(S1, S2) << endl;cout << minWindow(S3, S2) << endl;system("pause");return 0;}实验结果如下所示:
0 0
- 字符串的最小窗口问题
- 字符串的窗口滑动问题
- Coding Puzzels - 64 最小的窗口子字符串
- 最小窗口问题--Java语言
- 字符串最小周期问题
- 字符串变换最小问题
- 最大最小字符串问题
- HDU 3746 字符串匹配(字符串的最小循环节问题)
- 字符串问题---数组中两个字符串的最小距离
- 【字符串】【最小表示法】Vijos P1683 有根树的同构问题
- POJ 2406 (字符串的匹配) 最小循环节问题
- 字符串问题---最小包含子串的长度
- Vijos 有根树的同构问题【字符串---最小表示法】
- 字符串最小周期串问题
- 字符串最小周期串问题
- 字符串的最小表示
- 字符串问题---拼接所有字符串产生字典顺序最小的大字符串
- 拦截窗口的最大、最小事件
- Cocoapods trunk
- 作为首席架构师如何做好
- Linux进程间通信——管道
- android客户端学习-ViewUtils
- Android Studio运行时gradle错误
- 字符串的最小窗口问题
- 随机打乱一个数组,无重复的获取一定范围内的随机数
- jQuery学习和知识点总结归纳
- Nginx 502 Bad Gateway的处理
- Python图表绘制:matplotlib绘图库入门
- 降低gcc版本
- iOS获取UUID,并使用keychain存储
- jquery 常用插件地址
- 关于uboot2010.03LCD命令行界面,命令超过一行时,最后一行被输出结果覆盖的探讨