Leetcode231: Minimum Window Substring
2016-01-13 22:27
387 查看
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
For example,
S =
T =
Minimum window is
Note:
If there is no such window in S that covers all characters in T, return the empty string
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
双指针思想,尾指针不断往后扫,当扫到有一个窗口包含了所有T的字符,然后再收缩头指针,直到不能再收缩为止。最后记录所有可能的情况中窗口最小的
For example,
S =
"ADOBECODEBANC"
T =
"ABC"
Minimum window is
"BANC".
Note:
If there is no such window in S that covers all characters in T, return the empty string
"".
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
双指针思想,尾指针不断往后扫,当扫到有一个窗口包含了所有T的字符,然后再收缩头指针,直到不能再收缩为止。最后记录所有可能的情况中窗口最小的
class Solution { private: int count1[256]; int count2[256]; public: string minWindow(string S, string T) { // Start typing your C/C++ solution below // DO NOT write int main() function if (T.size() == 0 || S.size() == 0) return ""; memset(count1, 0, sizeof(count1)); memset(count2, 0, sizeof(count2)); for(int i = 0; i < T.size(); i++) { count1[T[i]]++; count2[T[i]]++; } int count = T.size(); int start = 0; int minSize = INT_MAX; int minStart; for(int end = 0; end < S.size(); end++) { if (count2[S[end]] > 0) { count1[S[end]]--; if (count1[S[end]] >= 0) count--; } //找到了包含所有字符的end位置 if (count == 0) {//从起点向后压缩,直到不能压缩为止 while(true) { if (count2[S[start]] > 0) { if (count1[S[start]] < 0) count1[S[start]]++; else break; } start++; } if (minSize > end - start + 1) { minSize = end - start + 1; minStart = start; } } } if (minSize == INT_MAX) return ""; string ret(S, minStart, minSize); return ret; } };
相关文章推荐
- 进程通信:管道(pipe)和 unix域套接字(socketpair)区别
- Nginx、LVS及HAProxy负载均衡软件的优缺点详解
- Redis系列-存储篇sorted set主要操作函数小结
- 关于小蜘蛛诞生的坎坎坷坷
- 作品第三课----用parseInt解析数字,并求和
- Java:利用java Timer类实现定时执行任务的功能
- HDU 1065 I Think I Need a Houseboat【恶心的水题】
- 7进制字符串转为10进制的int类型数字(H3C笔试题)
- SpringMVC 使用JSR-303进行校验 @Valid
- iOS状态栏颜色设置
- 《笨办法学Python》 第12课手记
- ucos实时操作系统学习笔记——操作系统在STM32的移植
- JS_语句
- web项目技术选型
- python核心编程-搜索与替换
- leveldb之简单测试
- 2016年搭建nginx+php+mysql遇到的一些问题
- 校验xx权限是否开启
- MySQL High Availability总结(二) 配置Master
- REST接口规范