• leetcode 76 最小覆盖子串


    简介

    如果给我做的话, 直接暴力, 应该会超时吧.
    直接看了答案, 感觉也不是特别巧妙.

    双指针

    class Solution {
        Map<Character, Integer> ori = new HashMap<Character, Integer>(); // 要覆盖的
        Map<Character, Integer> cnt = new HashMap<Character, Integer>(); // 当前范围的
        public String minWindow(String s, String t) {
            int tLen = t.length();
            for(int i=0; i<tLen; i++){
                char c = t.charAt(i);
                ori.put(c, ori.getOrDefault(c, 0) + 1); // 将map增加一个
            }
            int l = 0, r = -1;
            int len = Integer.MAX_VALUE, ansL = -1, ansR = -1;
            int sLen = s.length();
            while(r < sLen) {
                ++r;
                if(r < sLen && ori.containsKey(s.charAt(r))) {
                    cnt.put(s.charAt(r), cnt.getOrDefault(s.charAt(r), 0) + 1); // 先r右边移动
                }
                while(check() && l <= r) { // 如果满足条件左边移动
                    if(r - l + 1 < len) {
                        len = r - l + 1;
                        ansL = l;
                        ansR = l + len;
                    } 
                    if (ori.containsKey(s.charAt(l))) {
                        cnt.put(s.charAt(l), cnt.getOrDefault(s.charAt(l), 0) -1);
                    }
                    ++l;
                }
            }
            return ansL == -1 ? "" : s.substring(ansL, ansR);
        }
    
        public boolean check() {
            Iterator iter = ori.entrySet().iterator();
            while(iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                Character key = (Character) entry.getKey();
                Integer val = (Integer) entry.getValue();
                if(cnt.getOrDefault(key, 0) < val) {
                    return false;
                }
            }
            return true;
        }
    }
    
    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    C# 操作txt
    下周学习计划(0815——0822)
    配置允许外界访问的端口
    修改表结构
    C# return和break
    js Ajax的几种操作方法
    WebForm
    Extjs4新特性
    25、手把手教你Extjs5(二十五)Extjs5常用组件--form的基本用法
    24、手把手教你Extjs5(二十四)模块Form的自定义的设计[3]
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14878304.html
Copyright © 2020-2023  润新知