题目:http://poj.org/problem?id=1200

最近看了一个关于hash的问题,不是很明白,于是乎就找了些关于这方面的题目,这道题是一道简单的hash 字符串题目,就先从他入手吧。

题目说字串的最大数量不超过16Millions,也就是字串的存储16000000就够了。

查看网上给出的hash映射是把字串映射成为一个NC进制的数字每个字串都是一个数字。

#include <stdio.h>
#include <iostream>
using namespace std; const int MAX = ;
const int NUM = ; bool ha[MAX];//存储hash映射
char str[MAX];//存储元字符串
int num[NUM];//存储映射的数字 int main (void)
{ int n,nc,sum,count=,ans=; memset(num,,sizeof(num));
memset(str,'\0',sizeof(str));
memset(ha,false,sizeof(ha)); scanf("%d%d",&n,&nc);
scanf("%s",str);
//将每一个字母映射到一个数字上,nc进制的数字
for (int i = ; str[i] != '\0'; i++)
{
if(num[str[i]]==)
num[str[i]]=++count;
if(count == nc)break;
}
//将每个字串计算一个结果数字,然后判断其hash 是否已经映射过次数字
//如果没映射过则ans加1这样就能找到有多少不重复的字串了。
int len = strlen(str);
for(int i = ; i <= len-n; i++)
{
sum = ;
for (int j = ; j < n; j++)
sum = sum*nc+num[str[i+j]];
if(!ha[sum])
{
ha[sum]=true;
++ans;
}
}
printf("%d\n",ans);
return ;
}

POJ 1200 Crazy Search(字符串简单的hash)的更多相关文章

  1. POJ 1200 Crazy Search 字符串的Hash查找

    第一次涉及HASH查找的知识 对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR. 这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类. 还有用26进制, ...

  2. poj 1200 Crazy Search(hash)

    题目链接:http://poj.org/problem?id=1200 思路分析:从数据来看,该题目使用线性时间算法,可见子串的比较是不可能的:使用hash可以在常数时间内查找,可以常数时间内判重, ...

  3. POJ 1200 Crazy Search 【hash】

    <题目链接> 题目大意: 给定n,nc,和一个字符串,该字符串由nc种字符组成,现在要你寻找该字符串中长度为n的子字符串有多少种. 解题分析: 因为要判重,所以讲这些字符串hash一下,将 ...

  4. POJ 1200 Crazy Search【Hash入门】

    RK法:https://www.cnblogs.com/16crow/p/6879988.html #include<cstdio> #include<string> #inc ...

  5. POJ 1200 Crazy Search (哈希)

    题目链接 Description Many people like to solve hard puzzles some of which may lead them to madness. One ...

  6. POJ – 1200 Crazy Search

    http://poj.org/problem?id=1200 #include<iostream> #include<cstring> using namespace std; ...

  7. POJ 1200 Crazy Search

    思路:利用Karp-Rabin算法的思想,对每个子串进行Hash,如果Hash值相等则认为这两个子串是相同的(事实上还需要做进一步检查),Karp-Rabin算法的Hash函数有多种形式,但思想都是把 ...

  8. POJ-1200 Crazy Search,人生第一道hash题!

                                                        Crazy Search 真是不容易啊,人生第一道hash题竟然是搜博客看题解来的. 题意:给你 ...

  9. poj 1200 crasy search

    https://vjudge.net/problem/POJ-1200 题意: 给出一个字符串,给出子串的长度n和给出的字符串中不同字符的个数nc,统计这个字符串一共有多少不同的长度为n的子串. 思路 ...

随机推荐

  1. http协议请求方法

    解析HTTP协议六种请求方法get.put.post.delete.options和trace含义与区别. 1.GET   selecr请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库 ...

  2. Windows开机BIOS启动快捷按键

    Window装系统,开机需要调整启动选项...不同的机型,进入BIOS按键不同 按键列表

  3. 自己动手做——邮件客户端FrankMail

    一.预备知识 二.需求分析 三.编码 四.交付 软件界面: 发送结果: --EOF--

  4. StatefulSet和Deployment的区别

    “Deployment用于部署无状态服务,StatefulSet用来部署有状态服务”. 具体的,什么场景需要使用StatefulSet呢?官方给出的建议是,如果你部署的应用满足以下一个或多个部署需求, ...

  5. ios中在uiNavigationcontroller中做转场动画

    1:了解,当创建一个UINavigationcontroller中时,当创建一个子视图控制器压入uiNavigationController中,其中里面的view也别加入UINavigationcon ...

  6. 有可能挑战Java优势的四种技术

    2012-02-22  Java是一种杰出的产业开发语言,这是因为它带来了伟大的统一和对事实上以前并不存在的重要标准的关注.但是和所有语言一样,Java将来也会褪色.依据我做的超越Java的研究,一个 ...

  7. java获取n个工作日后的日期, 排除周末和节假日(顺延)

    一.写在前面 需求: 工作需要获取n个工作日后的日期, 需要排除weekend和holiday, holiday存在数据库中, 存入的形式是一个节日有起始日期和截止日期(以下文中有关于节假日的表截图) ...

  8. hibernate联合主键注解方式

    方法一:主键类用@Embeddable,pojo类仍然用@Entity但是引用主键类的对象用@Id 主键pojo类: @Embeddable public class composeIdPK impl ...

  9. CSRF攻击与防御(写得非常好)

    转自:http://blog.csdn.net/stpeace/article/details/53512283 CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forge ...

  10. suricata 命令行解释【转】

    suricata命令行 转载地址:http://blog.sina.com.cn/s/blog_6f8edcde0101gcha.html suricata命令行选项说明 你能两种方式使用命令行选项, ...