【代码随想录训练营】【Day05休息】【Day06】第三章|哈希表|哈希表理论基础|242.有效的字母异位词|349. 两个数组的交集|202. 快乐数|1. 两数之和

哈希表理论基础

总结:

  • 当我们遇到了要快速判断一个元素是否出现在集合里或者重复出现时,就要考虑哈希法。
  • 哈希法是用空间换时间的方法,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。

更多有关哈希表的理论基础可查阅:《代码随想录》哈希表理论基础


242.有效的字母异位词

题目详细:LeetCode.242

当两个字符串具有以下特点时,则称它们互为字母异位词:

  • 字符串的长度相等
  • 字符串中的每个字母的出现次数相同

所以我们只需要证明两个字符串是否满足以上两个特点,则可以确认两个字符串是否为字母异位词。

由此可得,我们可以利用哈希表来解决:

  • 比较两个字符串的长度,相同则开始统计每个字母的出现次数
  • 先统计一个字符串中出现的字母和字母出现的次数
  • 再遍历另一个字符串,当遇到相同的字母则其出现的次数减1
  • 最后遍历一次统计的结果,如果字母的出现次数为0,则说明在两个字符串中该字母出现的次数相同

哈希表有三种不同的结构,分别是:数组、哈希Set和哈希Map。

这道题我一开始使用的是哈希表中的Map结构来统计字符串中出现的字母和字母出现的次数,但是由于一些特殊的测试用最后还需要再遍历一次表来判断字符串中的每个字母的出现次数是否相同,所以换用数组来进行记录和遍历会时代码更加简洁一些。

Java解法(数组):

class Solution {
   
    public boolean isAnagram(String s, String t) {
   
        int[] set = new int[26];
        for(char c: s.toCharArray()){
   
            set[c - 'a']++;
        }
        for(char c: t.toCharArray()){
   
            int f = --set[c - 'a'];
            if

你可能感兴趣的:(散列表,哈希算法,leetcode)