标签:class blog code 2014 string os
题目大意:
分析长度为n的子串有多少种。
思路分析:
对于没出现的字符,将其分配一个数字。
然后将子串看做一个nc进制的数。
然后hash判断。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <string>
using namespace std;
bool vis[26666666];
int val[30];
char str[1111111];
int main()
{
int n,nc;
while(scanf("%d%d",&n,&nc)!=EOF)
{
scanf("%s",str);
memset(vis,0,sizeof vis);
memset(val,0,sizeof val);
int len=strlen(str);
int cnt=1;
int ans=0;
for(int i=0;i+n<=len;i++)
{
int sum=0;
for(int j=i;j<i+n;j++)
{
if(!val[str[j]-'a'])val[str[j]-'a']=cnt++;
sum*=nc;
sum+=val[str[j]-'a'];
}
if(!vis[sum])
{
ans++;
vis[sum]=true;
}
}
printf("%d\n",ans);
}
return 0;
}
POJ 1200 Crazy Search (字符串hash),布布扣,bubuko.com
POJ 1200 Crazy Search (字符串hash)
标签:class blog code 2014 string os
原文地址:http://blog.csdn.net/u010709592/article/details/34847635