leetcode minimum window subString

來源:互聯網
上載者:User

標籤:

題目:

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).

For example,
S = "ADOBECODEBANC"
T = "ABC"

Minimum window is "BANC".

這題題目中有視窗兩個字,實際上已經給出一定的提示了。解法為雙指標。

一個尾指標先尋找一個0-n的視窗使得在subString(0,n)中包含了所有的字元。

然後頭指標從0開始出發,試圖從頭部縮小該視窗。然後尾指標每擴大一次,就從頭部縮小一次。直至尾指標到達尾部。

具體實現時,利用兩個數組儲存資訊。

base數組儲存字串t中各個字元的資訊,例如對於題設的例子,T[65]值為1(字元A的ASCII碼值為65)

record儲存已經探測到的字元的個數。

注意,Sum這個變數除了在開始尋找第一個視窗時用來計量是否包含所有字元,一旦找到這一視窗,後面的值恒為0。

因此,第一個視窗找到後,end指標每往後移動一格,就嘗試縮小start的位置。

下面給出代碼:

public class Solution2 {/** * @param args */public String minWindow(String s, String t) {    int[]base=new int[256];    int[]record=new int[256];    for(int i=0;i<t.length();i++)    {    base[t.charAt(i)]++;    }    int sum=t.length();    int start=0;    int minStart=0;    int minEnd=Integer.MAX_VALUE;    for(int i=0;i<s.length();i++){if(base[s.charAt(i)]>0){record[s.charAt(i)]++;if(record[s.charAt(i)]<=base[s.charAt(i)])sum--;}if(sum==0){System.out.println("shrink begins:"+i);while(true){if(base[s.charAt(start)]>0){if(record[s.charAt(start)]>base[s.charAt(start)]){record[s.charAt(start)]--;}elsebreak;}start++;}System.out.println("minStart="+start+" mimEnd="+i);if((minEnd-minStart)>(i-start)){minEnd=i;minStart=start;}}}return s.substring(minStart, minEnd+1);    }public static void main(String[] args) {// TODO Auto-generated method stubString a="ADOBECODEBANCQQ";String b="ABC";System.out.println(new Solution2().minWindow(a,b));}}

  

leetcode minimum window subString

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.