统计每个连续段的长度
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
string s;
cin >> n >> k >> s;
vector<int>len;
int cnt = 1;
for (int i = 1; i < n; i++) {
if (s[i] == s[i - 1 ])cnt++;
else {
len.push_back(cnt);
cnt = 1;
}
}
len.push_back(cnt);
int m = len.size();
long long ans = 0;
if (k > m)ans = 0;
else if (k == 1) {
for (int i = 0; i < m; i++) {
ans += (long long)len[i] * (len[i] + 1) / 2;
}
}
else {
for(int i = 0; i <= m - k; i++) {
ans += (long long)len[i] * len[i + k - 1];
}
}
cout << ans << endl;
return 0;
}

京公网安备 11010502036488号