代码随想录--哈希表--有效的字母异位词题型
创始人
2025-05-29 03:23:06
0

哈希表理论知识补充:

当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!
https://www.programmercarl.com/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E5%93%88%E5%B8%8C%E8%A1%A8

哈希表有3种数据结构:
①数组  ②set  ③map
一般数值不多且范围可控时用数组,数值比较多时用set,要key,value对应时用map。
std::unordered_set底层实现为哈希表,std::set 和std::multiset 的底层实现是红黑树,红黑树是一种平衡二叉搜索树,所以key值是有序的,但key不可以修改,改动key值会导致整棵树的错乱,所以只能删除和增加。
std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。
当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。
那么再来看一下map ,在map 是一个key value 的数据结构,map中,对key是有限制,对value没有限制的,因为key的存储方式使用红黑树实现的。

有效的字母异位词题型

遇到一个题目,感觉想要用哈希法的时候,先看看能不能用数组,能用数组就尽量用数组,因为数组比较快,你用set的话,你每次放这个key值,你还要做一次哈希运算做一个映射,比数组浪费时间,而且set里面的结构比数组复杂,相比之下用数组做映射更直接的运行速度也是更快的。

学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词

题目规定是小写字母,数值才26个,所以考虑用数组。我们先定义一个数组,并且都等于0。然后做一个for循环字符串s,如遇到a则hash[0]++,然后再做一个for循环字符串t,对上面得出的hash数组,如遇到a则hash[0]--,最终再循环判断得出的hash数组,如果字符串s,t是有效的字母异构词,则最终的hash数组都是0,如果有哪个等于1或者-1等等即不等于0的话就说明字符串s,t不是有效的字母异构词。

这里有点不大懂的是,字符串s如果遇到a则hash[0]++,如果遇到c则hash[2]++,这种对应怎么得出的?
如下图可知,相连的字母ASCLL码相差1,所以s[i]-‘a’,如果s[i]=a,则s[i]-‘a’=0,就是hash[0]++了呀,即字符串s中当前字符为a,那么hash[0]++,就把字母a与hash[0]对应起来了。同理如果s[i]是b,则为hash[1]。

 大致代码套路:

int hash[26]={0};
for(int i=0;i
     hash[s[i]-'a']++;
  }
for(int i=0;i
     hash[t[i]-'a']--;
   }
for(int i=0;i<26;i++){
    if(hash[i]!=0)return false;
   }
return true;

相关内容

热门资讯

A股午评:创业板指半日跌0.8... 市场早盘震荡调整,创业板指领跌。南财金融终端显示,截至早盘收盘,沪指跌0.31%,深成指跌0.75%...
经典基础算法总结(排序、二分、... 经典算法与题目对应列表:https://leetcode.cn/circle/disc...
实战感受SQL注入(手工注入) 前言 在上篇文章中我们介绍了SQL注入漏洞,并且用简单的php代码,介绍...
【学习笔记】计算机视觉与深度学... 学习视频: 鲁鹏-计算机视觉与深度学习 1 图像分类任务 图像分类任务是计算机视觉的核...
维权变违法,“红内裤”事件博主... 一直以来,于东来和胖东来都是以踏实、实在、善待他人的形象示人。不过在维权方面,胖东来从未手软过。20...
傲农生物“脱险”后,何时恢复盈... 得益于2024年财报的向好表现,福建傲农生物科技集团股份有限公司(简称“傲农生物”)近日被撤销退市风...
中建投信托地产风险化解仍需时日... 中建投信托仍然被“地产旧伤"拖累。文/每日财报 汇水在信托行业深度转型的2024年,年报数据清晰反...
资金流向日报丨新易盛、胜宏科技... 一、证券市场回顾南财金融终端数据显示,昨日(5月29日,下同)上证综指日内上涨0.7%,收于3363...
黑马c++----string... 3.string容器 3.1.1string基本概念 本质: string 是c++...
经典卷积模型回顾29—YOLO... 1. 下载yolov2模型的权重和配置文件 ``` !wget https:...
52TOYS母公司乐自天成IP... 文 | 董武英今年以来,IP玩具行业获得了资本市场高度关注。港股市场上,泡泡玛特股价持续创出新高,截...
sublime for mac... 文章目录sublime for mac 常用快捷键命令面板搜索面板(文件、类ÿ...
吉利“人才摇篮”效应:新势力造... 2025年5月23日,在吉利控股集团与韩红爱心慈善基金会的公益合作启动仪式上,董事长李书福的一席话掀...
终止重大资产重组,光洋股份复牌... 5月30日,停牌近两周归来的光洋股份(002708.SZ)开盘逼近跌停。消息面上,该公司决定终止筹划...
extjs02 Ext.js 自定义事件和监听器 2022-05-20 17:11 更新 事件是在类发生的时候触发的...
华夏银行“破冰行动”启幕:新帅... 2024年5月22日,华夏银行迎来历史性时刻——金融“老将”杨书剑的董事长任职资格正式获国家金融监管...
EDA概念多数回调,华大九天跌... 5月30日,EDA概念多数回调,华大九天跌近6%,广立微、台基股份、盖伦电子跌逾3%。
银行板块早盘拉升,300红利低... 5月30日,A股三大指数早盘走低,银行板块拉升,300红利低波动指数截至发稿涨0.20%。相关ETF...
JVM CMS的缺点和问题 文章目录 缺点1、浮动垃圾2、空间碎片解决方案为什么CMS不使用标记整理,而采用标记清楚关于时间开销...
模拟实现memcpy和memm... 在模拟实现qsort的时候,我们知道的是这个函数的返回值是void,这个函数的第一个形...