leetcode -- Minimum Window Substring
2013-09-04 17:01
204 查看
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 emtpy string
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
[解题思路]
双指针问题,维护两个指针:start, end; 当start 和 end所围的字符串包含T时,此时将start尽可能往后移以寻找下一个window
本题一开始做不出来的问题在于如何移动start,即start移动的终止条件是什么?
line 27-28 是while循环的终止条件
ref
http://leetcode.com/2010/11/finding-minimum-window-in-s-which.html
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 emtpy string
"".
If there are multiple such windows, you are guaranteed that there will always be only one unique minimum window in S.
[解题思路]
双指针问题,维护两个指针:start, end; 当start 和 end所围的字符串包含T时,此时将start尽可能往后移以寻找下一个window
本题一开始做不出来的问题在于如何移动start,即start移动的终止条件是什么?
line 27-28 是while循环的终止条件
public String minWindow(String S, String T) { // Start typing your Java solution below // DO NOT write main() function if (S == null || T == null || S.length() == 0 || T.length() == 0) { return ""; } int[] needToFind = new int[256]; int[] hasFound = new int[256]; for (int i = 0; i < T.length(); i++) { needToFind[T.charAt(i)]++; } int minWinLen = Integer.MAX_VALUE; int count = 0, tLen = T.length(); int winBeg = 0, winEnd = 0; for (int begin = 0, end = 0; end < S.length(); end++) { if (needToFind[S.charAt(end)] == 0) { continue; } hasFound[S.charAt(end)]++; if(hasFound[S.charAt(end)] <= needToFind[S.charAt(end)]){ count ++; } if(count == tLen){ 27 while(needToFind[S.charAt(begin)] == 0 || 28 hasFound[S.charAt(begin)] > needToFind[S.charAt(begin)]){ if(hasFound[S.charAt(begin)] > needToFind[S.charAt(begin)]){ hasFound[S.charAt(begin)]--; } begin ++; } int winLen = end - begin + 1; if(winLen < minWinLen){ winBeg = begin; winEnd = end; minWinLen = winLen; } } } if (count == T.length()) { return S.substring(winBeg, winEnd + 1); } return ""; }
ref
http://leetcode.com/2010/11/finding-minimum-window-in-s-which.html
相关文章推荐
- LeetCode之Minimum Window Substring
- LeetCode Minimum Window Substring
- Leetcode Minimum Window Substring
- LeetCode Minimum Window Substring
- LeetCode刷题(49)--Minimum Window Substring
- leetcode — minimum-window-substring
- leetcode 76 Minimum Window Substring/ 209 Minimum Size Subarray Sum
- LeetCode-Minimum Window Substring-最小窗口子串-滑动窗口算法(尺取法)
- LeetCode : Minimum Window Substring
- [leetcode-76]Minimum Window Substring(java)
- Leetcode -- Minimum Window Substring
- LeetCode - Minimum Window Substring
- LeetCode(76) Minimum Window Substring
- Minimum Window Substring @LeetCode
- [LeetCode] Minimum Window Substring
- [LeetCode] Minimum Window Substring
- leetcode minimum window subString
- LeetCode: Minimum Window Substring
- [Leetcode] Minimum Window Substring
- minimum_window_substring ——leetcode