二刷76. Minimum Window Substring

Hard
区别在于因为getOrDefault用不熟,就直接在一开始就把所有的S里面的characters全部加进去了,不过value是0. 这样被window包括之后,value就会变成-1, 在移动start的时候判断value是不是大于0就直到这个char是不是t里面的,需不需要改变count了。
还有注意下substring这个API, 没有substring(int startIndex, int length)这个方法哈,只有
substring(int startIndex, int endIndex)
substring(int startindex)(to the end)

class Solution {
    public String minWindow(String s, String t) {
        if (s == null || s.length() == 0){
            return "";
        }
        Map<Character, Integer> map = new HashMap<>();
        for (char c : s.toCharArray()){
            map.put(c, 0);
        }
        for (char c : t.toCharArray()){
            if (!map.containsKey(c)){
                map.put(c, 1);
            } else{
                map.put(c, map.get(c) + 1);
            }
        }
        int minLen = s.length() + 1;
        int minStart = 0;
        int start = 0;
        int end = 0;
        int count = t.length();
        while (end < s.length()){
            char c = s.charAt(end);
            if (map.get(c) > 0){
                count--;
            }
            map.put(c, map.get(c) - 1);
            while (count == 0){
                if (end - start + 1 < minLen){
                    minLen = end - start + 1;
                    minStart = start;
                }
                char ch = s.charAt(start);
                map.put(ch, map.get(ch) + 1);
                if (map.get(ch) > 0){
                    count++;
                }
                start++;
            }
            end++;
        }
        return (minLen == s.length() + 1) ? "" : s.substring(minStart, minStart + minLen);
    }
}
    原文作者:greatfulltime
    原文地址: https://www.jianshu.com/p/eaac2763fcaf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞