1. 程式人生 > 其它 >最小覆蓋子串

最小覆蓋子串

技術標籤:Leetcode

最小覆蓋子串

題目描述

程式碼

import java.util.*;


public class Solution {
    /**
     * 
     * @param S string字串 
     * @param T string字串 
     * @return string字串
     */
    public String minWindow (String S, String T) {
        // write code here
        //記錄T中所有字元出現的次數
        int[] map = new
int[128]; for(int i=0; i<T.length(); i++){ map[T.charAt(i)]++; } //左右指標,end先查詢包含全部T字元,begin進行縮減子字串 int begin=0, end=0; int count = T.length(); //記錄最小子字串的頭 int head = 0; //視窗大小 int window = Integer.MAX_VALUE;
while(end < S.length()){ //每個出現的字元的次數都要減1,命中存在的字元,則比較的次數-1 if( map[S.charAt(end)]-- > 0){ count--; } end++; //全部命中,begin移動 while(count == 0){ //尋找最小視窗 if(end - begin <
window){ head = begin; window = end - begin; } //若begin指向的字元剛好被命中完的狀態,則count+1 //同時,移除的字元需要回加1 if( map[S.charAt(begin)]++ == 0 ){ count++; } begin++; } } return window==Integer.MAX_VALUE ? "" :S.substring(head,head+window); } }