76. 最小覆盖子串

算法题(程序员面试宝典)

解题思路主要来源于leetcode官方与《程序员面试宝典》。

76. 最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。

注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
示例 2:

输入:s = “a”, t = “a”
输出:“a”

提示:

1 <= s.length, t.length <= 105
s 和 t 由英文字母组成

进阶:你能设计一个在 o(n) 时间内解决此问题的算法吗?

解题方法

解题思路1

class Solution {
    public String minWindow(String s, String t) {
        //滑动窗口技巧(双指针思想)
        //need:保存t中的字符:数量  {"A":1,"B":1}
        //window:保存窗口中的符合t 中字符的 字符:数量  {"A":1,"B":2}
        HashMap need = new HashMap();
        HashMap window = new HashMap();
        //need,window 初始化
        
        for(int i=0;i

76. 最小覆盖子串_第1张图片
最后一个测试用例一直过不了,因为定义的Map里的Integer是对象,Integer会缓存频繁使用的数值[-128,127],超过此范围就会new一个对象,导致使用“==”错误,改为equals()即可。
参考资料:https://leetcode-cn.com/problems/minimum-window-substring/solution/labuladongde-suan-fa-xiao-chao-javaban-b-glhm/
https://blog.csdn.net/losetowin/article/details/49968365

你可能感兴趣的:(字符串,滑动窗口,java,算法,leetcode)