Hash:一般是一个整数。就是说通过某种算法,可以把一个字符串"压缩" 成一个整数。
一,题意:
  给出两个数n,nc,并给出一个由nc种字符组成的字符串。求这个字符串中长度为n的不同子串有多少种?
二,思路:
  1.这个题不用匹配,因为不高效。
  2.将长度为n的子串看作n位的nc进制数,将问题转化为共有多少种十进制数字。
  3.哈希时,每一个字符都对应这0 ~ nc-1的一个数字。
三,步骤:
  1.给nc个字母编号:0 ~ nc-1
    hashArray[ch[i]] = k++;
  2.明确每n个字母ch[i]对应一个n位的nc进制的数hashArray[ch[i]],如:abb---011;
  3.将hashArray[]的nc进制数转换成一个十进制的整数sum,并且使lage[sum]=true标记一下
  4.统计多少个不同的子串。

 #include<iostream>
#include<cstring>
using namespace std;
const int MaxNum = ;
char ch[MaxNum];
bool lage[MaxNum]; //用于标记是否为相同的子串
int hashArray[]; //存储n个字母转换成整数之后再转换成nc进制的数 int main() {
int n, nc;
while (cin >> n >> nc >> ch) {
int k = ;
int len = strlen(ch); //注意此处
for (int i = ; i < len; i++) {
if (hashArray[ch[i]] == ) {
hashArray[ch[i]] = k++; //给nc个字母编号,如hashArray['a']=1
}
}
int ans = ; //记录不同子串的种数
for (int i = ; i <= len - n; i++) {
int sum = ;
for (int j = i; j < i + n; j++) {
sum = sum * nc + hashArray[ch[j]];//将hashArray[]的nc进制数转换成一个十进制的整数sum
}
if (!lage[sum]) { //未出现过为false
ans++;
lage[sum] = true; //出现过的为true
}
}
cout << ans << endl;
}
return ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

poj1200-Crazy Search(hash入门经典)的更多相关文章

  1. [poj1200]Crazy Search(hash)

    Crazy Search Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26713 Accepted: 7449 Descrip ...

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

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

  3. POJ1200 Crazy Search

    Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Description Many peo ...

  4. poj 1200 Crazy Search(hash)

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

  5. hdu1381 Crazy Search(hash map)

    题目意思: 给出一个字符串和字串的长度,求出该字符串的全部给定长度的字串的个数(不同样). 题目分析: 此题为简单的字符串哈hash map问题,能够直接调用STL里的map类. map<str ...

  6. POJ1200 A - Crazy Search(哈希)

    A - Crazy Search Many people like to solve hard puzzles some of which may lead them to madness. One ...

  7. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  8. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  9. 转 Kafka入门经典教程

    Kafka入门经典教程 http://www.aboutyun.com/thread-12882-1-1.html 问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic. ...

随机推荐

  1. jstl自定义时间格式

    <fmt:formatDate value='${time}' pattern='yyyy-MM-dd HH:mm:ss'/> <s:iterator>下的<s:prop ...

  2. 第三十二篇:在SOUI2.0中像android一样使用资源

    SOUI2.0之前,在SOUI中使用资源通常是直接使用这个资源的name(一个字符串)来引用.使用字符串的好处在于字符串能够表达这个资源的意义,因此使用字符串也是现代UI引擎常用的方式. 尽管直接使用 ...

  3. UWP学习记录2-设计和UI之布局

    UWP学习记录2-设计和UI之布局 1.导航基础知识 应用里,多个页面会有层次关系或者对等关系.这两种关系,通常在一个复杂应用里都会存在,而关系的选定依据: 对于对等导航,一般用选项卡(tabs)或者 ...

  4. git学习(四):撤销修改和撤销删除

    修改有两种情况 在工作区修改但没有add到暂存区 git checkout -- <file> 在工作区修改了也add到暂存区 git reset HEAD <file> 先撤 ...

  5. 虚拟机下CentOS 配置IP地址的三种方法

    1.自动获取IP地址(我不是用的这种方法,不做过多介绍) 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #if ...

  6. Swift 圆角设置

    故事面板中设置圆角(storyboard) Key Path layer.borderWidth(边框宽度) layer.cornerRadius(圆角弧度) layer.borderColor(边框 ...

  7. 解决vsftpd的refusing to run with writable root inside chroot错误

    参考 http://www.cnblogs.com/CSGrandeur/p/3754126.html 在Ubuntu下用 vsftpd 配置FTP服务器,配置 “ sudo chmod a-w /h ...

  8. 已知服务器ftp的账号密码,求解数据库表的内容

    一开始觉得这两个是完全不相干的东西,直到出现了这样一个问题,对方网站只有ftp的账号密码,并且能正常访问到代码.但是当需求了解注册人数的时候,后台没有显示,只能到数据库去找,这时怎么找呢? 原来是可以 ...

  9. [Leetcode] Bulls and Cows

    You are playing the following Bulls and Cows game with your friend: You write a 4-digit secret numbe ...

  10. BeautifulSoup

    参考:http://www.freebuf.com/news/special/96763.html 相关资料:http://www.jb51.net/article/65287.htm 1.Pytho ...