有效的字母异位词(哈希法介绍+代码实现)

题目

在这里插入图片描述

①哈希表作用简单介绍

1.哈希法是:空间换时间

利用辅助数组(容器)记录数据,再对这些数据处理。

通俗讲:利用辅助数组处理问题(并且要达到提高时间性能)

常用的哈希结构:数组、set容器、map容器。

2.哈希表深入理解

哈希表深入

②本题哈希法思路

1.数组作为哈希结构

本题26个字母,只需要26个索引,索引是有限的。数组作为哈希结构,效率最高!

当然,set和map也行。只是这里数组效率最高

2.哈希表的意义

一开始表示统计s的哈希表

Ⅰ:下标表示字母
0表示'a',25表示'z')

Ⅱ:值表示 出现的次数

最终表示s-t的哈希表(s减去t)

如果是字母异位词,那么整个哈希表的值都应该是0

3.本题总体思路

Ⅰ:遍历s,统计描述s的哈希表。

Ⅱ:遍历t,s哈希表相应的次数被减。当值结果不为0,则说明不是字母异位词

如果值为负数,就说明了t的某个字母比s的多!

③代码实现

class Solution {
public:
    bool isAnagram(string s, string t) 
    {
    	int Hash[26]={0};
		
		for(const auto &i:s){
			Hash[int(i-'a')]++;//一开始统计 s 的哈希表(统计哈希表)
		}
		
		for(const auto &i:t){
			Hash[int(i-'a')]--;//最终哈希表(处理哈希表)
		}
    	
    	for(const auto &h:Hash){
    		if(h!=0)return false;//检验哈希表是否满足
		}
    	
    	return true;
    }
};
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值