字符串hash第一题; #include<iostream> #include<stdio.h> #include<string.h> #define M 100000000 using namespace std; char s[M]; int p[M]; bool hash[5*M]; int main() { int N,NC; while(scanf("%d%d",&N,&NC)==2) { // memset(p,0,sizeof(p)); scanf("%s",s); int len=strlen(s); //给字符串的每一位字符编码从0开始(0,1,2。。。) int count=0; for(int i=0;i<len;i++) if(!p[s[i]]) p[s[i]]=++count; int ans=0; // memset(hash,0,sizeof(hash)); //转化为NC进制数; for(int i=0;i<len-N+1;i++) { int sum=0; for(int j=i;j<i+N;j++) sum=sum*NC+p[s[j]]; if(!hash[sum]) { ans++; hash[sum]=1; } } printf("%d/n",ans); } return 0; }