【力扣】有效的字母异位词

126 阅读2分钟

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。
在做题之前,我们先来复习一下哈希的一些基础知识吧!

哈希的基本思想

在记录的关键码和存储地址之间建立一个确定的对应关系,通过计算得到待查记录的地址。

134.png

哈希的基本概念

哈希表:采用哈希技术存储查找集合的连续存储空间。
哈希函数:将关键码映射为哈希表中适当存储位置的函数。
哈希地址:由哈希函数所得的存储地址。

0100.png

哈希的关键问题

1. 如何设计哈希函数

  1. 计算简单。哈希函数不应该有很大的计算量,否则会降低查找效率。
  2. 地址均匀。函数值要尽量均匀散布在地址空间,保证存储空间的有效利用并减少冲突。 常见的哈希函数有直接定址法、平方取中法、折叠法、除留余数法

2. 如何解决冲突

冲突:对于两个不同关键码ki≠kj,有H(ki)=H(kj)。 同义词:ki 和 kj 相对于H 称做同义词。
处理冲突的方法有开放定址法、线性探测法、二次探测法
image.png

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;
    }
}