zoukankan      html  css  js  c++  java
  • 76. 最小覆盖子串 (JAVA)

    给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。

    示例:

    输入: S = "ADOBECODEBANC", T = "ABC"
    输出: "BANC"
    说明:

    如果 S 中不存这样的子串,则返回空字符串 ""。
    如果 S 中存在这样的子串,我们保证它是唯一的答案。

    class Solution {
        public String minWindow(String s, String t) {
            Map<Character, Integer> srcMap = new HashMap<>();
            Map<Character, Integer> targetMap = new HashMap<>();
            for(int i = 0; i < t.length(); i++){
                targetMap.put(t.charAt(i), targetMap.getOrDefault(t.charAt(i),0)+1);
            }
    
            int startPointer = 0;
            int endPointer = -1;
            int minStart = 0;
            int minEnd = s.length();
            while(true){
                if(isContainMap(srcMap,targetMap)) { //找到一种解决方案
                    if(endPointer - startPointer < minEnd - minStart){
                        minStart = startPointer;
                        minEnd = endPointer;
                    }
    
                    //缩小window
                    srcMap.put(s.charAt(startPointer),srcMap.get(s.charAt(startPointer))-1);
                    startPointer++; 
                } else {
                    //扩大window
                    endPointer++;
                    if(endPointer >= s.length()) break; 
                    srcMap.put(s.charAt(endPointer), srcMap.getOrDefault(s.charAt(endPointer), 0)+1);
                    
                }
            }
            return minEnd < s.length() ? s.substring(minStart, minEnd+1) : "";
        }
    
        private boolean isContainMap(Map<Character, Integer> srcMap, Map<Character, Integer> targetMap) {
            for (Character key : targetMap.keySet()) {
                if(!srcMap.containsKey(key) || srcMap.get(key) < targetMap.get(key)) return false;
            }
            return true;
        }
    }
  • 相关阅读:
    Java集合类
    打开Eclipse报错
    FusionWidgets之AngularGauge图
    OLAP 大表和小表并行hash join
    分页SQL模板
    全表扫描分页
    Java中的a++和++a的区别
    JAVA中线程同步方法
    final、finally和finalize的区别
    HashMap和Hashtable的异同点
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/13251586.html
Copyright © 2011-2022 走看看