zoukankan      html  css  js  c++  java
  • 76. Minimum Window Substring (JAVA)

    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).

    Example:

    Input: S = "ADOBECODEBANC", T = "ABC"
    Output: "BANC"
    

    Note:

    • If there is no such window in S that covers all characters in T, return the empty string "".
    • If there is such window, you are guaranteed that there will always be only one unique minimum window in S.

    重点:

    • 滑动窗口
    • Map的put,get,判断是否存在,遍历
    • String的截取
    class Solution {
        public String minWindow(String s, String t) {
            Map<Character,Integer> target = new HashMap<Character,Integer>();
            for(int i = 0; i < t.length(); i++){
                if(!target.containsKey(t.charAt(i))) target.put(t.charAt(i),1);
                else target.put(t.charAt(i), target.get(t.charAt(i))+1);
            }
            
            int left = 0;
            int right = 0;
            int minLength = Integer.MAX_VALUE;
            int minLeft = 0;
            int minRight = s.length()-1;
            Map<Character,Integer> source = new HashMap<Character,Integer>();
            source.put(s.charAt(0),1);
            while(left<=right){
                if(ifContain(source,target)){
                    if(right-left+1 < minLength){
                        minLength = right-left+1;
                        minLeft = left;
                        minRight = right;
                    } 
                    
                    source.put(s.charAt(left), source.get(s.charAt(left))-1);
                    left++;
                }
                else{
                    right++;
                    if(right == s.length()) break;
                    
                    if(!source.containsKey(s.charAt(right))) source.put(s.charAt(right),1);
                    else source.put(s.charAt(right), source.get(s.charAt(right))+1);
                }
            }
            
            if(minLength==Integer.MAX_VALUE) return "";
            else return s.substring(minLeft,minRight+1); 
        }
        
        public Boolean ifContain(Map<Character, Integer> source, Map<Character, Integer> target){
            for(Character key: target.keySet()){
                if(!source.containsKey(key) || source.get(key) < target.get(key)) return false;
            }
            return true;
        }
    }
  • 相关阅读:
    观后感
    用户故事排球教练助手
    本周工作量
    本周个人作业
    个人工作量
    个人作业
    产品计划总结
    典型用户和场景总结
    排球比赛计分规则
    PowerShell ISE:Windows Server 2008 R2默认不安装
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/10919677.html
Copyright © 2011-2022 走看看