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表中的次数要求 一个填坑,一个挖坑
  • 所谓的双指针只指 一个首指针一个尾指镇,首指针用于确定上界,尾指针用于确定下界,如果题目要求是否是最小,确定好尾指针,首指针一步步的收缩,进而确定最小的范围。
  • 一天一天的改变自己不好的坏习惯

你可能感兴趣的:(substring)