「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。
在做题之前,我们先来复习一下哈希的一些基础知识吧!
哈希的基本思想
在记录的关键码和存储地址之间建立一个确定的对应关系,通过计算得到待查记录的地址。
哈希的基本概念
哈希表:采用哈希技术存储查找集合的连续存储空间。
哈希函数:将关键码映射为哈希表中适当存储位置的函数。
哈希地址:由哈希函数所得的存储地址。
哈希的关键问题
1. 如何设计哈希函数
- 计算简单。哈希函数不应该有很大的计算量,否则会降低查找效率。
- 地址均匀。函数值要尽量均匀散布在地址空间,保证存储空间的有效利用并减少冲突。 常见的哈希函数有直接定址法、平方取中法、折叠法、除留余数法
2. 如何解决冲突
冲突:对于两个不同关键码ki≠kj,有H(ki)=H(kj)。 同义词:ki 和 kj 相对于H 称做同义词。
处理冲突的方法有开放定址法、线性探测法、二次探测法
3. 哈希是一种完整的存储结构吗?
哈希只是通过记录的关键码定位该记录,没有完整地表达记录之间的逻辑关系,所以,哈希主要是面向查找的存储结构。
有效的字母异位词
题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意: 若 s 和 t **中每个字符出现的次数都相同,则称 s 和 t **互为字母异位词。
示例1:
输入: s = "anagram", t = "nagaram"
输出: true
示例2:
输入: s = "rat", t = "car"
输出: false
代码
class Solution {
public boolean isAnagram(String s, String t) {
//先定义一个含有26个字母的数组
int[] array=new int[26];
//统计字符串s中字符出现的次数
for(char c:s.toCharArray()){
array[c-'a']+=1;
}
//检查字符串t中是否出现了这些字符
//如果出现则减1
for(char c:t.toCharArray()){
array[c-'a']-=1;
}
for(int i:array){
//array数组如果有的元素不为零0,说明字符串s和t有的字符个数不一致,返回false
if(i!=0){
return false;
}
}
return true;
}
}