标签:
题目:
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 = "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.
思路:举个例子吧
S="aabcdafac" T="ac"
保存两个指针,分别指向当前已找到的字符串的start和end位置;我们先找到了aabc,这是第一个包含ac的字符串,好的,这个长度为4,start=0,end=3,这时,保持end不动,移动start,发现start=1,end=3可以更短。之后再就不能移start了。
接下来,咱们移动end,发现移到end=4,不是a或c,那就再移,移到end=5,发现是a,这时start还是1,咱们移动start,发现可以一直移到start=3。
接下来再移动end,如此类推
结合代码走一走,就会发现这个思路还是很线性的。
package string; import java.util.HashMap; import java.util.Map; public class MinimumWindowSubstring { public String minWindow(String s, String t) { int m = s.length(); int n = t.length(); Map<Character, Integer> found = new HashMap<Character, Integer>(); Map<Character, Integer> base = new HashMap<Character, Integer>(); for (int i = 0; i < n; ++i) { char c = t.charAt(i); if (base.containsKey(c)) { base.put(c, base.get(c) + 1); } else { base.put(c, 1); found.put(c, 0); } } int count = 0; int ss = -1; int ee = m; for (int end = 0, start = 0; end < m; ++end) { char c = s.charAt(end); if (base.containsKey(c)) { found.put(c, found.get(c) + 1); if (found.get(c) <= base.get(c)) ++count; if (count == n) { char startChar = s.charAt(start); while (!base.containsKey(startChar) || found.get(startChar) > base.get(startChar)) { if (base.containsKey(startChar)) found.put(startChar, found.get(startChar) - 1); startChar = s.charAt(++start); } if (end - start < ee - ss) { ee = end; ss = start; } } } } return ss == -1 ? "" : s.substring(ss, ee + 1); } public static void main(String[] args) { // TODO Auto-generated method stub String S = "ADOBECODEBANC"; String T = "ABC"; MinimumWindowSubstring m = new MinimumWindowSubstring(); System.out.println(m.minWindow(S, T)); } }
LeetCode - Minimum Window Substring
标签:
原文地址:http://www.cnblogs.com/shuaiwhu/p/5094630.html