c_cpp 最小窗口子串。给定一个字符串S和一个字符串T,找到S中的最小窗口,它将包含在Comple中的T中的所有字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 最小窗口子串。给定一个字符串S和一个字符串T,找到S中的最小窗口,它将包含在Comple中的T中的所有字符相关的知识,希望对你有一定的参考价值。
#include <iostream>
#include <string>
#include <unordered_map>
#include <climits>
#include <vector>
using namespace std;
string minimum_window_substring(const string &s, const string &p) {
if(p.empty() || s.empty() || s.size() < p.size()) return "";
int left = 0, right = 0, ns = s.size(), np = p.size();
int start_pos = 0, min_len = INT_MAX;
vector<int> total(256, 0), sofar(256, 0);
for(char c : p) total[c]++; // should be p not s !!!!!!!
int curr_len = 0;
for(; right < ns; right++) {
char c = s[right];
if(total[c] == 0) continue;
else sofar[c]++;
if(sofar[c] <= total[c]) curr_len++;
while (curr_len == np) {
char ch = s[left];
if(total[ch] == 0) left++;
else if (sofar[ch] > total[ch]) {
sofar[ch]--;
left++;
} else break;
}
if(curr_len == np) {
if(min_len > right - left + 1) {
min_len = right - left + 1;
start_pos = left;
}
}
}
if(curr_len < np) return "";
return s.substr(start_pos, min_len);
}
int main()
{
cout << minimum_window_substring("aaabcdfefbbcf", "bcf");
return 0;
}
以上是关于c_cpp 最小窗口子串。给定一个字符串S和一个字符串T,找到S中的最小窗口,它将包含在Comple中的T中的所有字符的主要内容,如果未能解决你的问题,请参考以下文章
力扣笔记----滑动窗口 3. 无重复字符的最长子串 209. 长度最小的子数组
力扣笔记----滑动窗口 3. 无重复字符的最长子串 209. 长度最小的子数组
力扣笔记----滑动窗口 3. 无重复字符的最长子串 209. 长度最小的子数组
Leetcode 76.最小覆盖子串
c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口
c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口