题意:
给定一个字符串 S,只由 k种小写字母组成。现在给定一个长度 l,要求统计一下 有多少种不同的长度为 l 的子串( S中连续的几个字符)。
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int l,k,base[1145141],a[1145141];
string str;
int main() {
cin>>l>>k>>str;
base[0]=1;
for(int i=0;i<str.size();i++)
base[i]=base[i-1]*97%mod;
a[0]=(str[0]-'a'+1)%mod;
for(int i=1;i<str.size();i++) {
a[i]=str[i]-'a'+1+a[i-1]*11%mod;
}
int last=a[l-1],res,ans=0;
for(int i=1;i+l<str.size();i++) {
res=(a[l+i-1]-a[i-1]*base[l+i-1-i+1])%mod;
if(res!=last) ans++;
}
cout<<ans;
return 0;
}