
#include <iostream>
#include<string.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int n, k;
string s;
int len, book[200002];
int main() {
cin >> n >> k;
cin >> s;
len = s.length();
int ans = INF;
for (int i = 0; i < 26; i++) {
char ch = 'a' + i;
int cnt = 0;
memset(book, 0, sizeof(book)); //清0
for (int j = 0; j < len; j++) { //记录ch的所有位置
if (s[j] == ch) {
book[cnt++] = j;
}
}
if (cnt < k) continue; //如果ch不够k个
for (int j = 0; j <= cnt - k; j++) { //连续的k个为一个子串,更新最小值
ans = min(ans, book[j + k - 1] - book[j] + 1);
}
}
if (ans < INF) cout << ans << endl;
else cout << -1 << endl;
return 0;
}
c++标准库中,min(),max(),来比较两个数字的大小
本文介绍了一种使用C++实现的字符串匹配算法,通过遍历字符串并记录特定字符的位置,寻找长度为k的子串,使得该子串包含相同的字符。文章详细展示了如何使用C++标准库中的min()和max()函数进行数值比较,并提供了一个完整的代码示例。
677

被折叠的 条评论
为什么被折叠?



