题目: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. python模块之lib2to3(py2转py3自动化工具)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之lib2to3(py2转py3自动化工具) #http://tieba.baidu.com ...

  2. Jquery的html方法里包含特殊字符的处理

    jqueryhtml()特殊字符 在使用jquery的html()方法时,有时候里面添加的html代码含有一些特殊字符,需要进行转义. 如下例子: inst_html = "<a st ...

  3. fiddlescript 操作

    什么是 JScript .NET Fiddler Script 是用JScript.NET语言写的 http://docs.telerik.com/fiddler/KnowledgeBase/Fidd ...

  4. shell笔记-算术运算

    算术运算在Bash shell环境中,可以利用let.(( ))和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具也会非常有用.let命令可以直接执行基本的算术操作.当使用let时 ...

  5. 上海期货交易所CTP行情和交易接入

    发布时间:2018-09-25   技术:C++11,动态库的制作   概述 CTP的接入Demo 详细 代码下载:http://www.demodashi.com/demo/14125.html 本 ...

  6. ios中webview的高级用法(二)

     框架: webview与js的通信框架 #import "MJViewController.h" #import "MBProgressHUD+Add.h" ...

  7. iOS Main Thread Checker: UI API called on a background thread的解释

    Xcode打印栏出现如下警告: Main Thread Checker: UI API called on a background thread 这个是什么错误呢? 其实这并不一定是错误,也可以理解 ...

  8. linux创建用户名密码等操作

    转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...

  9. iOS 组件化方案

    概述 近一年iOS业界讨论组件化方案甚多,大体来说有3种. Protocol注册方案 URL注册方案 Target-Action runtime调用方案 URL注册方案据我了解很多大公司都在采用,蘑菇 ...

  10. ROS学习(六)—— 理解ROS节点

    一.准备工作 下载一个轻量级的模拟器 sudo apt-get install ros-kinetic-ros-tutorials 二.图概念的理解 1.Nodes:一个节点就是一个可执行文件,用来与 ...