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;
        }
    }
  • 相关阅读:
    Solaris 11 system package 安装与更新(如:assembler)
    JS实现页面内跳转
    使用Eclipse进行嵌入式软件开发
    Eclipse下C++标准库报错::mbstate_t has not been declared
    嵌入式ARM开发环境搭建
    CCS内存数据转成图片
    RESET
    Android 圆角研究
    Java 重写必须满足的条件
    android 社会化分享集成
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/13251586.html
Copyright © 2011-2022 走看看