题解 | #最小覆盖子串#

最小覆盖子串

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

代码简单,只写简单代码

import java.util.*;


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();
        if (n == 0 || m == 0 || m > n) return "";
        int[] need = new int[128];
        int count = m;
        for (int i = 0; i < m; i ++ ) {
            need[T.charAt(i)] ++ ;
        }
        int l = 0, r = 0, size = n + 1;
        int start = 0;
        while (r < n) {
            char c = S.charAt(r);
            if (need[c] > 0) {
                count -- ;
            }
            need[c] -- ;
            if (count == 0) {
                while (l < r && need[S.charAt(l)] < 0) {
                    need[S.charAt(l)] ++ ;
                    l ++ ;
                }
                if (r - l + 1 < size) {
                    size = r - l + 1;
                    start = l;
                }
            }
            r ++ ;
        }
        return size == n + 1?"": S.substring(start, start + size);

    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-21 00:27
点赞 评论 收藏
分享
WillingLing:查看图片
点赞 评论 收藏
分享
牛客583549203号:腾讯还好,况且实习而已,实习生流动性很大,属于正常现象,记得和HR委婉解释
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务