题解 | #最小覆盖子串#

最小覆盖子串

http://www.nowcoder.com/practice/c466d480d20c4c7c9d322d12ca7955ac



public class Solution {
    /**
     * 
     * @param S string字符串 
     * @param T string字符串 
     * @return string字符串
     */
    public String minWindow (String S, String T) {
        // write code here
        
        int n = S.length();
        int m = T.length();
        //子串起点
        int start = 0;
        //子串长度 题目中长度小于10000
        int len = 10001;
        //统计T中字符出现的次数
        int[] map = new int[128];
        for(int i = 0;i< m;i++){
            map[T.charAt(i)] ++;
        }
        //滑动窗口边界 l r  ,count 字符串数量
        int l = 0, r = 0, count = m;
        while( r < n){
            //如果出现次数大于0  向左找到能匹配的最大右边界
            if(map[S.charAt( r ++)] -- > 0){
                count --;
            }
            //当前子串合法
            while(count == 0){
                if(len > r - l){
                    len = r- l;
                    start = l;
                }
                //这里就是滑动窗口了,如果符合规则下,第一个数在map里肯定是 0 ,窗口 l边界右移 消除的数量肯定要加 +
                if(map[S.charAt(l++)] ++ == 0){
                    count ++;
                }
            }
           
        }
        System.out.println(start);
        System.out.println(len);
         return len == 10001 ? "" :S.substring(start,start +len);
    }
}
全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务