码迷,mamicode.com
首页 > 编程语言 > 详细

76. 最小覆盖子串 (JAVA)

时间:2020-07-05 20:54:07      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:cmap   keyset   解决方案   解决   一个   r++   point   color   poi   

给你一个字符串 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;
    }
}

 

76. 最小覆盖子串 (JAVA)

标签:cmap   keyset   解决方案   解决   一个   r++   point   color   poi   

原文地址:https://www.cnblogs.com/qionglouyuyu/p/13251586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!