首页 > 其他 > 详细

POJ 1200 Crazy Search (字符串hash)

时间:2014-06-27 09:45:53      阅读:362      评论:0      收藏:0      [点我收藏+]

题目大意:

分析长度为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)

原文:http://blog.csdn.net/u010709592/article/details/34847635

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!