栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

哈希表通俗解释,leetcode

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

哈希表通俗解释,leetcode

本人转码小白,刚刚学习到哈希表。欢迎各位大佬批评指正。

算法思想来自博客代码随想录。(不是打广告啊,自学实在需要一些参考)

浅聊一下哈希表:

哈希表:又叫散列表,用来快速判断一个元素是否出现在集合里。(数组就是一个哈希表)

哈希函数:将一个某个数据成员,映射成一个数,并将其放在哈希表中。

举个人话的例子:

水果店里苹果单价2.5元,香蕉单价3.1元,菠萝...,如何快速查到某种水果的单价?这时需要用到哈希函数。

先用哈希函数进行映射:

然后,放到一个哈希表(数组)中,over。

方法比较:

传统找单价方法:输入苹果,遍历所有水果,找到苹果,输出2.5.      O(n)

哈希方法:输入苹果,输出映射001,找到001索引对应的2.5。         O(1)

哈希碰撞:学到了再聊....

1.题目描述:

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词。

字母异位词:每个字符出现字数相同。比如s = "aee" ,t = "eae"

2.题解思路:

1.定义一个长度为26的数组(哈希表)

2.把字符串中的'a','b','c'...'z'分别映射到0,1,2....25。(即数组的索引上)

3.s中的字母每出现一次,数组索引对应的值加1。

   t中的字母每出现一次,数组索引对应的值减1。

4.遍历结束后,如果数组中的元素全是0,证明s和t为字母异位词。

举例子:假设 s = "aee" ,t = "eae"

3.本地实现
#include
#include
using namespace std;

class Solution
{
public:
	bool isAnagram(string s, string t)
	{
		int hash[26] = { 0 };//创建一个长度为26的,全是0的数组,作为哈希表
		//遍历s,把字母a、b、c....转化成数字0、1、2.....。哈希函数的思想
		for (int i = 0; i < s.size(); i++)
		{
			hash[s[i] - 'a']++;  //一种映射方法,保证'a'对应的是0。每出现一次,增加1
		}
		//遍历t
		for (int i = 0; i < t.size(); i++)
		{
			hash[t[i] - 'a']--;  //每出现一次,减少1
		}
		//遍历一边hash表,如果全是0,两字符串为字母异位
		for (int i = 0; i < (sizeof(hash) / sizeof(hash[0])); i++)
		{
			if (hash[i] != 0) return false;//一旦表内有不为1,返回false
		}
		return true;//表内全是0,返回true
	}
};


int main()
{
	string s = "abc",t = "bca";
	Solution solution;
	cout << solution.isAnagram(s, t) << endl;
	system("pause");
	return 0;
}

码字不易,谢谢访问。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849310.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号