经常会遇到需要建立字符串哈希表的问题,例如strtok,或者删除指定字符串的中一些字符等等,可见的字符有256个,那么很容易想到建立一个哈希表,但是其中有一些技巧,可以节省空间,其实可以使用bitmap的形式实现,但是c语言中没有现成的东西,所以需要自己实现。下面就是实现方式:

char hash[32] = {0};
do
{hash[*str >> 3] |=  (1 << (*str & 7));
}while(*str++)

以上就建立了一个可以容纳256个字符的hash表,首先解释一下为什么只用32个char的数组就可以表示给256个字符打点标记,因为32个字符的数据内存上是连续的,每个字符是8个bit,所以char hash[32]总共有256和bit,也就能够表示指定的字符是否出现过。接下来就是如何置位了,*str >> 3表示 *str / 8,也就是计算该字符应该在第几个char上打点标记,*str & 7表示*str % 7,可以计算出应该在该char上的哪个bit打点标记。至于为什么用位操作实现,是因为位操作很快。

下面是如何查找字符是否在哈希表中的代码:

if((map[*str >> 3]) &  (1<< (*str & 7)))

如何建立英文字符的哈希表相关推荐

  1. 找第一个只出现一次的字符_leetcode哈希表之第一个只出现一次的字符

    序 本文主要记录一下leetcode哈希表之第一个只出现一次的字符 题目 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字母.示例:s = "abac ...

  2. 问答丨如何理解哈希表的工作原理?

    #我头新条闻# 哈希来自英文hash的翻译.其实恰如其分应该叫散列.散列的目的就是找到一个函数能够将一堆数字均匀分布在一维数组里.理想状态大家存储的位置是不同的,否则哈希函数比较糟糕.但是当两个数字经 ...

  3. 第七章 哈希表与字符串

    文章目录 哈希表与字符串 哈希表基础知识 HashMap 基本使用 leetcoe 例1:最长回文串(409) 例2:词语模式(290) 例3:同字符词语分组(49) 例4:无重复字符的最长子串(3) ...

  4. Python数据结构:哈希表

    哈希 散列(哈希)是电脑科学中一种对资料的处理方法,通过某种特定的函数/算法(称为散列函数/算法)将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,生成一种便于搜索的数据结构(称为散列表) ...

  5. 代码随想录——哈希表篇

    1.哈希表理论基础 哈希表 哈希表是根据关键码的值而直接进行访问的数据结构.哈希表英文名称为hash table又称散列表. 其实数组就是一张哈希表.哈希表中关键码就是数组的索引下标,然后通过下标直接 ...

  6. 数据结构:哈希表函数构造和冲突解决方法

    哈希表 哈希函数:记录的存储位置和它的关键字之间建立一个确定的对应关系. 冲突:对不同的关键字可能得到同一哈希地址,这种现象称为冲突. 哈希函数构造方法 1.直接定址法 取关键字或关键字的某个线性函数 ...

  7. (王道408考研数据结构)第七章查找-第四节:哈希表(基本概念及其操作)

    文章目录 一:哈希表基本概念 (1)哈希表 (2)建立一个简单的哈希表(快速入门以及相关术语) (3)ASL计算 二:常见哈希函数 (1)直接定址法 ( 常 考 ) _{(常考)}

  8. LeetBook哈希表专题题解(详解/一题多解)

    哈希表 文章目录 哈希表 设计哈希表 设计哈希集合(set) (超大数组法) (拉链法1(list实现)) (拉链法2(模拟实现单链表+虚拟头节点)) (拉链法3(模拟单链表不叫虚拟头节点)) 设计哈 ...

  9. 电话号码查询系统(数据结构之哈希表)

    哈希表 哈希表(Hash Table)是一种根据关键字直接访问内存存储位置的数据结构.通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数. 1. ...

最新文章

  1. Docker常用操作命令
  2. ActionScript3学习笔记2-包
  3. mysql 汉编码 的选_peewee连接mysql汉语言数据编码_mysql
  4. [css] 你知道全屏滚动的原理是什么吗?它用到了CSS的哪些属性?
  5. 利用networkx求解网络的重叠度
  6. mysql8和php7不能连接_php无法连接mysql8.x
  7. python 嵌套异常
  8. 大龄屌丝自学笔记--Java零基础到菜鸟--006
  9. tiny4412 串口驱动分析五 --- LDD3上TTY驱动程序源码
  10. javaweb php异步处理,Spring-MVC异步请求之Servlet异步处理
  11. 路由端口的限制与破解
  12. Hadoop HDFS 实现原理图文详解
  13. 富文本编辑器NicEdit的使用
  14. 机器学习领域几种距离度量方法metric详解
  15. 【黄冈市中级人民法院在湖北行星传动设备有限公司的强制清算案件中的违法问题给投资者的启示】
  16. 交互设计师作品集网站整理
  17. 30天自制操作系统 第2天
  18. 时频分析工具箱典型函数的使用
  19. 豆瓣评分小程序Part-3
  20. 哈工大计算机854考研经验分享

热门文章

  1. 前端面试题总结(转载)
  2. 中国象棋的人机博弈程序
  3. 第一台电子计算机教授领导,第一台电子计算机
  4. ios html录制视频,iPhone怎么录屏?玩转iOS14自带屏幕录制功能全攻略
  5. android gradle 设置 output文件名,Android gradle build 修改文件名称及目录
  6. 学习 《电路》(尼尔森著,第十版)第一章笔记(电流)
  7. vue(移动端)使用高德地图实现精准定位
  8. CarSim仿真快速入门(十六)—CarSim传感器仿真之ADAS Sensor Objects (2)
  9. android微信自定义分享代码,android 调用本地微信自定义多图分享朋友圈,可放在share sdk中一起使用...
  10. BlueTooth: 无线技术之争谁将胜出 WiFi、蓝牙还是NFC?