因为没有初始化ans搞了一晚上
还是尺取,枚举所有l 然后寻找对应满足条件的r,这个串可以被后面所有的串包含,所以每个l 的贡献就是len-r+1
#include<bits/stdc++.h> using namespace std; #define ll long long int main(){ int t,k,len,r,sum; ll ans=0; char s[1000005]; int vis[1000]; scanf("%d",&t); while(t--){ memset(vis,0,sizeof vis); scanf("%s%d",s,&k); len=strlen(s); sum=r=0; for(int l=0;l<len;l++){ if(l) { int tmp=s[l-1]; vis[tmp]--; if(vis[tmp]==0) sum--; } while(1){ if(sum==k || r==len) break; int tmp=s[r]; vis[tmp]++; if(vis[tmp]==1) sum++; r++; } if(sum==k) ans+=len-r+1; else break; } printf("%lld ",ans); } }