题目
2. K13629 字符计数
题目描述
给定一个全部由小写字母组成的字符串S,设X是S的一个连续子串,如果X中包含的任何字符出现的次数都不超过K,则称X是一个合法的子串。对于给定的S和X,请计算合法的子串的数量。
输入格式
第1行:一个正整数T,表示测试数据的组数,每组测试数据包含两行:
第1行:一个有小写字母组成的字符串S。
第2行:一个正整数K。
输出格式
每组数据输出一行:表示合法的连续子串的数量。
输入输出样例
输入样例1:复制
3 abc 1 abcabc 1 abcabc 2
输出样例1:复制
6 15 21
说明
【数据范围】
1 <= T <= 100; 1 <= S.size() <= 100000; 1 <= K <= 100000;
【耗时限制】1000ms 【内存限制】128MB
解答
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL t,cnt[130],ans,x;
string s;
int main(){
cin>>t;
while(t--){
memset(cnt,0,sizeof cnt);
cin>>s>>x;
LL l=0,sum=0,ans=0;
for(LL r=0;r<s.size();r++){
cnt[s[r]]++;
while(l<r && cnt[s[r]]>x){
cnt[s[l]]--;
l++;
}
ans+=r-l+1;
}
printf("%lld\n",ans);
}
return 0;
}
评测记录