美文网首页Leetcode
Leetcode.76.Minimum Window Subst

Leetcode.76.Minimum Window Subst

作者: Jimmy木 | 来源:发表于2019-10-11 11:08 被阅读0次

题目

给定两个字符串, 求第一个字符串包含第二个字符串字符的最小子字符串.

Input: S = "ADOBECODEBANC", T = "ABC"
Output: "BANC"
Input: S = "AD", T = "X"
Output: ""

思路

求一个子字符串, 需要设立leftright指针.
第二个字符串的字符可能有重复的, 需要设立一个map计算字符出现次数.

left = 0, right = 0.
固定left, 移动right, 先找出一个符合条件的字符串.
然后固定right, 移动left, 缩小窗口, 缩小后移动right.

string minWindow(string s, string t) {
    map<char,int> tMap;
    for(int i = 0;i < t.size();i++){
        tMap[t[i]]++;
    }

    int l = 0, r = 0;
    int pos = 0, len = 0;
    int count = (int)t.size();

    while (r < s.size()) {
        tMap[s[r]]--;
        if(tMap[s[r]] >= 0) count--;

        while (count == 0 && l <= r) {
            if (len == 0 || len > r - l + 1) {
                len = r -l + 1;
                pos = l;
            }
            if (++tMap[s[l++]] > 0) {
                count++;
            }
        }
        r++;
    }

    return s.substr(pos, len);
}

总结

理解流程, 固定一端移动另一端, 确定好固定项和

相关文章

网友评论

    本文标题:Leetcode.76.Minimum Window Subst

    本文链接:https://www.haomeiwen.com/subject/zeltmctx.html