最小覆盖子串

charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法.

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。

示例:

输入: S = “ADOBECODEBANC”, T = “ABC”
输出: “BANC”
说明:

如果 S 中不存这样的子串,则返回空字符串 “”。
如果 S 中存在这样的子串,我们保证它是唯一的答案。

class Solution {
    public String minWindow(String s, String t) {
        if(s.length()==0||t.length()==0)
           return "";//返回空字符串
        int[] array=new int[128];//根据英文字符的码;
    for(int i=0;i0)//该字母没找全  if(array[c]!=0)不对 ,因为不是t中的字符串,array[i]<0
           sum--;//已找到目标子串的 其中一个字符
        array[c]--;//标注字符串s的字符,除了目标子串的字符aary[c]是正数,恰好找到时,array[c]==0
        while(sum==0){//说明已经找到包含t所有字母的字符串
        //记录包含子串的长度  优化
        if(max>right-left+1){//更新最小区间
            head=left;
            max=right-left+1;
        }
        char lc=s.charAt(left);//优化区间 left++
        if(array[lc]==0){//说明该字符包含在t字符串中
           sum++;
        
        }
        array[lc]++;//
        left++;


        }
        right++;//在没到达字符串最末尾,继续右进,寻找最优解
    }
     return head==-1?"":s.substring(head,head+max);
    }
}

你可能感兴趣的:(试题)