【经典算法】:哈希方法
2016-01-07 17:36
260 查看
前言
作者在这里体会到了一种非常好用的方法,就是把各种变量的值存在哈希表里面,也可以把各种变量的比较用哈希表进行,深深的感受到了这种方法的遍历,然后想将其发扬光大,因此撰写此文,但是作者水平有限,可能不能完全把大家讲明白,希望大家有不懂得地方来留言问我正文
哈希表的前奏给出一个很简单的例子
比如说一串string : software
这个string中的每个字符都可以存进哈希表里面
哈希表就是存储字符的一张表,通过字符的ASCII码值存储
第一个例子
给出一个例子然后详细分析下让大家感受下这种方法的魅力leetcode上面的一道题,判断两个字符串是否所有字符都能匹配
比如说 abcdef efdcab这两个字符串是能够匹配的,而abcde abcfe这两个字符串是不能匹配的。
通过哈希表做这道题的方法如下:
int count[256]; //因为有256个ASCII码值
对于第一个字符串,每出现一个字符,就把相应的ASCII码值对应的count进行++;
对于第二个字符串,每出现一个字符,就把相应的ASCII码值对应的count进行–;
对第二个字符串循环的时候进行判断,如果相应的count==0,说明在字符串里面有两个字符能够匹配
如果到最后都能匹配,说明这两个字符串完全匹配了~
附上源码:
[code]#include <iostream> #include <string> using namespace std; int main(){ int count[26]; memset(count,0,sizeof(count)); string s1,s2; cin>>s1>>s2; for(int i=0;i<s1.length();i++){ count[s1[i]-'a']++; } for(i=0;i<s2.length();i++){ count[s2[i]-'a']--; } for(i=0;i<26;i++){ if(count[i]!=0){ cout<<"no"; return 0; } } cout<<"yes"; }
第二个例子
bulls and cows问题 ,这是一个经典问题,也不用我费劲说了解决这个问题,也可以用上述的解题思路,能够省去很多事。
思路就在于对于相应的位进行判断,这里要写一个逻辑。
直接给上源码,认真看就能体会到这种方法的魅力~
[code]#include <iostream> #include <string> using namespace std; int main(){ int count[10]; // bool flag[10]; memset(count,0,sizeof(count)); //memset(flag,false,sizeof(flag)); string s1,s2; cin>>s1>>s2; int A=0,B=0; for(int i=0;i<s1.length();i++){ if(s1[i]==s2[i]){ A++; //A代表直接相同的位置 //flag[s1[i]-'0']= true; } else count[s1[i]-'0']++; } for(i=0;i<s2.length();i++){ count[s2[i]-'0']--; if(count[s2[i]-'0']==0 ) { B++; //B代表错位能够相同的位置 } } cout<<A<<" "<<B<<endl; }
相关文章推荐
- struts.xml路径修改后的web配置
- 设计模式(五):命令模式
- 读《Android开发艺术探索》----ImageLoader的实现
- service
- java5.0自动装箱和拆箱
- 安卓开发-签名
- mac终端命令大全介绍
- 程序员MM的自白:磨人小妖精之安卓碎片化
- 前端试题1
- Orchard中的多语言功能
- vim快捷键
- javascript 正则匹配 提取所有 preg_match_all matchAll方法
- Android 网络开源库之-retrofit
- Python学习笔记9-Python 链接MySql数据库
- note
- 操作和操作队列 NSOperation和NSOperationQueue
- 从一个文件里面读取一个txt文件
- 事业单位改革
- CouchBase 2.5Kb数据无法编辑的解决办法
- Python学习笔记9-Python 链接MySql数据库