zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    国内的pythoner强烈建议使用豆瓣的pypi源 zz
    python3.x中的urllib模块
    idcheck.py
    17、关于hibernate的N+1问题
    16、【转】Hibernate 原汁原味的四种抓取策略
    1、SSH的整合---->将Struts2整合到Spring中
    1、利用json2html.js处理json数据
    1、Ubuntu14.04使用root登陆帐户
    2、CentOS中修改yum源
    1、在CentOS上安装Java JDK的步骤
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14878304.html
Copyright © 2011-2022 走看看