Day11(哈希表)

💫把简单的事情认真做好。


📆学习日期:2025年1月27日22:22:37

💻学习内容:哈希表理论基础 | 有效的字母异位词

⏲️学习时长:50min

练习题目
题目描述

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

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • st 仅包含小写字母

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

解题思路
  • 整体思路&&注意事项
  1. 利用哈希法来解决问题
  2. 哈希法的数据结构:数组,set,map
  3. 本题使用 数组 作为哈希表(字母a-z连续,范围可控)
  4. 数组record[26],遍历统计字符串s中每个字母的频次,遍历字符串t,频次相减,若最终数组record所有值为0,则为字母异位词

  • 代码实现
  1. int record[26]
  2. 统计s的字母频次
  3. s的频次基础之上,根据t的频次进行操作
  4. 判断record是否全为0

Bug

无😏

//2025年1月27日22:59:35
//2025年1月27日23:07:53
class Solution {
public:
    bool isAnagram(string s, string t) {
        int record[26]={0};//定义哈希表
        int lenth=sizeof(record)/sizeof(record[0]);//数组长度

        for(int i=0;i<s.size();i++){
            record[s[i]-'a']++;//统计字符串s的字母频次
        }// 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了

        for(int j=0;j<t.size();j++){
            record[t[j]-'a']--;
        }

        
        for(int i=0;i<lenth;i++){
            if(record[i]!=0) return false;//不是字母异位词
        }

        return true;//
        
    }
};
学习总结
  1. 想要使用哈希法时,可以先看看是否可以用 数组 结构
  2. int record[26]={0};//数组赋值
  3. int lenth=sizeof(record)/sizeof(record[0]);//数组长度
相关题目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值