String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1403 Accepted Submission(s): 469
How many substrings there are that contain at least k(1≤k≤26) distinct characters?
The first line contains string S .
The second line contains a integer k(1≤k≤26) .
2 abcabcabca 4 abcabcabcabc 3
0 55
wange2014 | We have carefully selected several similar problems for you: 5780 5779 5778 5777 5775
代码:
#include<cstdio>
#include<cstring>
typedef long long ll;
using namespace std;
char a[1000005];
int main (){
int t,l,r,flag,vis[30],k,c;
ll ans;
scanf("%d",&t);
while(t--){
scanf("%s%d",a,&k);
l=0;r=0;flag=0;ans=0;
memset(vis,0,sizeof(vis));
int len=strlen(a);
while(l<=len-k){
while(r<len&&flag<k){
c=a[r]-'a';
if(!vis[c])
flag++;
vis[c]++;
r++;
}
if(flag==k){
ans+=len-r+1;
}
c=a[l]-'a';
vis[c]--;
if(!vis[c])
flag--;
l++;
}
printf("%lld\n",ans);
}
}