c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <vector>
#include <string>
#include <climits>
using namespace std;
string find_minimum_window(string s, string t) {
    if(s.empty() || t.empty()) return;

    int ns = s.size(), nt = t.size();
    vector<int> total(256, 0);
    vector<int> sofar(256, 0);
    for(int i=0; i<nt; i++) 
        total[t[i]]++;
    
    int L = 0, R; 
    int minL = 0;                           //gist2
    int count = 0;
    int min_win_len = INT_MAX;
    
    for(R=0; R<ns; R++) {                   // gist0, a big for loop
        if(total[s[R]] == 0) continue;
        else sofar[s[R]]++;

        if(sofar[s[R]] <= total[s[R]])      // gist1, <= not <
            count++;

        if(count == nt) {                   // POS1
            while(true) {
                char c = s[L]; 
                if(total[c] == 0) { L++; }
                else if(sofar[c] > total[c]) {
                    sofar[c]--;
                    L++;
                }
                else break;
            }  
            if(R - L + 1 < min_win_len) {   // this judge should be inside POS1
                min_win_len = R - L + 1;
                minL = L;
            }
        }
    }
    string res;
    if(count == nt)                         // gist3, cannot forget this. 
        res = s.substr(minL, min_win_len);  // gist4, start from "minL" not "L"
    return res;
}
int main() {
    string s = "abdccdedca";
    cout << find_minimum_window(s, "acd");
}

以上是关于c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 最小窗口子串。给定一个字符串S和一个字符串T,找到S中的最小窗口,它将包含在Comple中的T中的所有字符

c_cpp 查找包含另一个字符串的所有字符的字符串中的最小窗口

076 Minimum Window Substring 最小窗口子字符串

LeetCode最小窗口子字符串以及求解子字符串模板

Leetcode 76.最小覆盖子串

LeetCode76. 最小覆盖子串