HDU5672(尺取法)

来源:互联网 发布:长虹网络电视 编辑:程序博客网 时间:2024/04/28 22:05


HDU5672-String



#include<cstdio>#include<cstring>typedef long long ll;using namespace std;char str[1000005];int main(){    int T,k,t;    ll ans;    scanf("%d",&T);    int vis[30];    int l,r,flag,len;    while(T--)    {        scanf("%s%d",str,&k);        l=r=0;//初始化左右指针        flag=0;        ans=0;        len=strlen(str);        memset(vis,0,sizeof(vis));        while(l<=len-k)        {            while(flag<k&&r<len)            {                t=str[r]-'a';                if(!vis[t])                flag++;//当前已有flag个不同字符                vis[t]++;                r++;            }//寻找以l为起点的最小子串            if(flag==k)            ans+=len-r+1;//包含最小子串的子串都满足条件            t=str[l]-'a';            vis[t]--;            if(!vis[t])            flag--;            l++;//起点右移        }        printf("%lld\n",ans);    }    return 0;}


0 0
原创粉丝点击