码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1200 Crazy Search (字符串hash)

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

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!