[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 =
T =
Minimum window is
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。
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。
相关文章推荐
- UIImageView上添加Button不能响应点击事件
- iOS:UIView的CALayer基本演练
- API Guides > Loaders
- ural 1133 Fibonacci Sequence 二分枚举
- UIAlertController的用法示例
- iOS开发 指定UIView的某几个角为圆角
- easyui的textbox和validatebox的 赋值区别
- 搭建自家的wiki平台:win2008 破解安装confluence-5.1.4 和 汉化。 推荐
- easyui中 combogrid控件的loadData方法加载本地数据
- UIViewController不dealloc問題
- 内核中__builtin_constant_p 函数
- UIButton的使用
- easyui $.parser.parse 页面重新渲染
- NSOperationQueue和NSOperation的使用方法
- UEFI启动是什么意思 UEFI启动对比Bios启动优势在哪里
- SequenceFile 读写操作
- @manytoone设置为optional=true不起作用
- UITextFild
- 【IOS 开发学习总结-OC-48】★★ios开发之UI控件——UIDatePicker与 UIPickerView
- Ugui的介绍视频地址和笔记