第一次做哈希啊,深刻体会一下,好好学习
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
bool hash[16000005];
int m[260];
int main()
{
int n,k,num=0;
int ans=0;
string a;
cin>>n>>k>>a;
memset(m,0,sizeof(m));
memset(hash,0,sizeof(hash));
int len=a.size();
for(int i=0;i<len;i++)//根据有几个不同的字母,把它转化为几进制的数
{
if(!m[a[i]-'a'])
m[a[i]-'a']=++num;
if(num==k)
break;
}
len=len-n;
for(int i=0;i<=len;i++)
{
int sum=0;
for(int j=0;j<n;j++)
{
sum=sum*k+m[a[i+j]-'a']+1;
}
if(!hash[sum])//标记这个和是否出现过
{
hash[sum]=1;
++ans;
}
}
cout<<ans<<endl;
return 0;
}