您的位置:首页 > 产品设计 > UI/UE

[Leetcode] Minimum Window Substring My Submissions Question Solution

2015-10-15 13:14 696 查看
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"
.

public class Solution {
public String minWindow(String s, String t) {
Map<Character, Integer> record = new HashMap<>();
int count = 0;
int minWindow = Integer.MAX_VALUE;
int minLeftPosition = 0;
int minRightPosition = 0;
for(int i = 0; i < t.length(); i++){
if(record.containsKey(t.charAt(i))){
record.put(t.charAt(i),(record.get(t.charAt(i))+1));
}
else{
record.put(t.charAt(i), 1);
}
}

int leftPosition = 0;
int rightPosition = 0;
while(rightPosition < s.length()){
Character currentChar = s.charAt(rightPosition);
if(record.containsKey(currentChar)){
record.put(currentChar, record.get(currentChar) - 1);
if(record.get(currentChar) >= 0)
count++;
}
rightPosition++;

if(count == t.length()){
while(true){
Character charToBeRemoved = s.charAt(leftPosition);
if(record.containsKey(charToBeRemoved) && record.get(charToBeRemoved) == 0){
break;
}
else if(record.containsKey(charToBeRemoved) && record.get(charToBeRemoved) < 0){
leftPosition++;
record.put(charToBeRemoved, record.get(charToBeRemoved)+1);
}
else{
leftPosition++;
}
}
if(minWindow > rightPosition - leftPosition){
minWindow = rightPosition - leftPosition;
minLeftPosition = leftPosition;
minRightPosition = rightPosition;
}
}
}
if(count < t.length())
return "";
return s.substring(minLeftPosition,minRightPosition);
}
}依然是slide window的思路,

对于检测T已被覆盖的方法,参考了http://articles.leetcode.com/2010/11/finding-minimum-window-in-s-which.html,原作很巧妙的引入了count。只有当一个字母真正的cover了之前没cover到的character,count才会被增加。所以当count == T.length时,便可知T已被cover。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: