题解 | #最小覆盖子串# 算滑动窗口吗?

最小覆盖子串

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) {
        if (S.equals(T)) return S;
        if (S.length() < T.length()) return "";
        //滑动窗口
        HashMap<Character, Integer> hashMap = new HashMap<>();
        HashMap<Character, Integer> windows = new HashMap<>();
        char[] SC = S.toCharArray();
        char[] ST = T.toCharArray();
        //将T放入哈希表中
        for (int i = 0; i < ST.length; i++) {
            hashMap.put(ST[i], hashMap.getOrDefault(ST[i], 0) + 1);
        }
        int min = Integer.MAX_VALUE;
        int start = 0;
        for (int i = 0; i < SC.length; i++) {
            if (hashMap.containsKey(SC[i])) {
                int left = i;
                while (left <= SC.length) {
                    if (windows.equals(hashMap)) {
                        if (min > left - i) {
                            min = left - i;
                            start = i;
                        }
                        break;
                    }
                    if (left==SC.length) break;
                    if (hashMap.containsKey(SC[left])) {
                        int w = windows.getOrDefault(SC[left], 0);
                        int h = hashMap.get(SC[left]);
                        if (w != h) windows.put(SC[left], windows.getOrDefault(SC[left], 0) + 1);
                    }
                    left++;
                }
                windows.clear();
            }
        }
        return min == Integer.MAX_VALUE ? "" : S.substring(start, min + start);
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
02-24 17:39
门头沟学院 Java
神哥不得了:神哥来啦~专业技能的话建议不要前面空那么多,八股的话建议先把高频top 50的八股多巩固几遍,千万不要看那些假高频八股。项目的话,建议换两个高质量的项目上去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务