题解 | #最小覆盖子串#

最小覆盖子串

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param S string字符串
     * @param T string字符串
     * @return string字符串
     */
    Map<Character, Integer> need = new HashMap<>();
    Map<Character, Integer> cnt = new HashMap<>();
    public String minWindow (String S, String T) {
        // write code here
        int sizet = T.length();
        int sizes = S.length();
        if(sizet>sizes){
            return "";
        }
        for (int i = 0; i < sizet; i++) {
            need.put(T.charAt(i), need.getOrDefault(T.charAt(i), 0) + 1);
            cnt.put(S.charAt(i), cnt.getOrDefault(S.charAt(i), 0) + 1);
        }
        int start = 0;
        int end = sizet - 1;
        int length = Integer.MAX_VALUE;
        int result = 0;
        while (end < sizes&&start<=end) {
            if (check()) {
                if (end - start + 1 < length) {
                    length = end - start + 1;
                    result = start;
                }
                System.out.println("start:"+start+"end:"+end+"length:"+length);
                Integer count = cnt.getOrDefault(S.charAt(start), 0);
                if (count > 1) {
                    cnt.put(S.charAt(start), count - 1);

                } else {
                    cnt.remove(S.charAt(start));
                }
                start++;

            } else {
                ++end;
                if (end < sizes) {
                    cnt.put(S.charAt(end), cnt.getOrDefault(S.charAt(end), 0) + 1);
                }



            }


        }

        return length<Integer.MAX_VALUE? S.substring(result, result + length):"";
    }

    public boolean check() {
        for (Character c :    need.keySet()) {
            Integer needCount = need.get(c);
            Integer nowCount =  cnt.getOrDefault(c, 0);
            if (nowCount < needCount) {
                return false;
            }

        }
        return true;

    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
爱睡觉的冰箱哥:你是我今晚见过的最美的牛客女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务