[H哈希] lc76. 最小覆盖子串(双指针+哈希)

1. 题目来源

链接:76. 最小覆盖子串

2. 题目解析

前导题:

在这一开始写了个 cnt == ht.size(),又进一步加深了 unordered_map 的理解。不论对其赋不赋值,均会进行插入操作!!一定牢记这点。

思路还是很常规的,套用了第三题的双指针思想,及第 30 题的一小部分快速判断区间字符是否覆盖的思想。蛮重要的两个思想。

在这里插入图片描述

代码:

class Solution {
    
    
public:
    string minWindow(string s, string t) {
    
    
        unordered_map<char, int> hs, ht;
        for (auto e : t) ht[e] ++ ;
        
        string res;
        int cnt = 0;
        for (int i = 0, j = 0; i < s.size(); i ++ ) {
    
    
            hs[s[i]] ++ ;// 先加入哈希表中,若加入后该字符小于等于有效字符的个数则说明该操作有效
            if (hs[s[i]] <= ht[s[i]]) cnt ++ ;	// 等号不能丢...一开始想错了

            while (hs[s[j]] > ht[s[j]]) hs[s[j ++ ]] -- ;
            if (cnt == t.size()) {
    
    
                if (i - j + 1 < res.size() || res.empty())
                    res = s.substr(j, i - j + 1);
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/yl_puyu/article/details/112000160