给定一个字符串 s,请找出其中最多包含 k 个不同字符的最长子串长度。
输入描述
第一行输入一个字符串 s。
第二行输入一个整数 k。
输出描述
输出最多包含 k 个不同字符的最长子串长度。
示例 1
输入
text
eceba
2
输出
text
3
说明
最长子串为 ece,包含 e、c 两个不同字符,长度为 3。
C++ 解法
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int k;
cin >> k;
unordered_map<char, int> cnt;
int left = 0, ans = 0;
for (int right = 0; right < (int)s.size(); right++) {
cnt[s[right]]++;
while ((int)cnt.size() > k) {
cnt[s[left]]--;
if (cnt[s[left]] == 0) cnt.erase(s[left]);
left++;
}
ans = max(ans, right - left + 1);
}
cout << ans << endl;
return 0;
}