zoukankan      html  css  js  c++  java
  • Minimum Window Substring

    Minimum Window Substring

    问题:

    Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).

    思路:

      Hashtable+双指针

    我的代码:

    public class Solution {
        public String minWindow(String s, String t) {
            if(s==null || s.length()==0)    return "";
            if(t==null || t.length()==0)    return "";
            int[] mark = new int[256];
            int[] valid = new int[256];
            for(int i=0; i<t.length(); i++)
            {
                mark[t.charAt(i)]++;
                valid[t.charAt(i)]++;
            }
            int minStart = 0;
            int minSize = Integer.MAX_VALUE;
            int start = 0;
            int count = 0;
            
            for(int end=0; end<s.length(); end++)
            {
                if(mark[s.charAt(end)] > 0)
                {
                    valid[s.charAt(end)]--;
                    if(valid[s.charAt(end)] >= 0) count++;
                    if(count == t.length())
                    {
                        while(true)
                        {
                            if(mark[s.charAt(start)] > 0)
                            {
                                if(valid[s.charAt(start)] < 0) valid[s.charAt(start)]++;
                                else break;
                            }
                            start++;
                        }
                        if(minSize > end-start+1)
                        {
                            minSize = end-start+1;
                            minStart = start;
                        }
                    }
                }
                
            }
            if(minSize == Integer.MAX_VALUE) return "";
            return s.substring(minStart, minStart+minSize);
        }
    }
    View Code

    学习之处:

    • 对于一个含有重复的对象集合,要像用Hash继续标记是否访问,用一个hash表显然是不够的,因为对象集合中含有重复元素啊,此时此刻常用的方式是用两个hash表,一个hash表用于标示每一个对象出现的次数,另外一个hash表用于标示每一个对象是否合乎前面一个hash表中的次数要求 一个填坑,一个挖坑
    • 所谓的双指针只指 一个首指针一个尾指镇,首指针用于确定上界,尾指针用于确定下界,如果题目要求是否是最小,确定好尾指针,首指针一步步的收缩,进而确定最小的范围。
    • 一天一天的改变自己不好的坏习惯
  • 相关阅读:
    web前端的面试真题
    web前端面试真题! 面试的经历和回答只做参考1
    web前端面试真题! 面试的经历和回答只做参考
    html面试资料
    angluar.js的核心介绍
    解决 Chrome支持小于12px 的文字
    div居中效果出现的问题和解决方法
    li和li之间的bug解决方法
    前端面试题笔试考题和答案
    html5新增的标签和使用的方法
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4493216.html
Copyright © 2011-2022 走看看