Leetcode76最小覆盖子串

Leetcode76最小覆盖子串_第1张图片

思路:滑动窗口思想

1. 滑动窗口是什么:用一个滑动窗口为覆盖目标子串的字符串

2.怎么移动窗口:当不满足覆盖时右指针移动扩大范围,当覆盖了就移动左指针缩减范围直到再次不覆盖

3. 怎么判断是否覆盖:这里使用两个哈希表,一个保存目标子串字符数,一个保存窗口内的字符数,注意是窗口内的,因为需要用窗口的和目标子串进行比较来控制移动

4. 怎么控制循环:外层循环while(right

class Solution {
    Map map = new HashMap();
    Map target = new HashMap();
    public String minWindow(String s, String t) {
        if(s.length() == 1 && s.equals(t)){
            return s;
        }
        int left = 0;
        //初始化为-1
        int right = -1;
        char[] str = s.toCharArray();
        char[] tc = t.toCharArray();
        //两个map,一个保存目标串,一个保存窗口值
        String res = "";
        for(int i = 0;i=right-left+1){
                    res = s.substring(left,right+1);
                    min = right - left + 1;
                }
                map.put(str[left],map.getOrDefault(str[left],0)-1);
                left++;
            }
        }
        return res;
    }
    public boolean isMatch(){
        Set entry = target.entrySet();
        for(Object e : entry){
            Map.Entry o = (Map.Entry) e;
            Integer val = (Integer)o.getValue();
            Character key = (Character)o.getKey();
            if(map.getOrDefault(key,0)

你可能感兴趣的:(算法,算法,数据结构)