力扣242 有效的字母异位词

题目:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例:

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

思路:

(1)遍历其中一个字符串,统计各字符出现的次数,将次数存在一个数组中。

(2)遍历另一个字符串,对该数组次数进行减少。

(3)最终若数组中次数都为0,则true。

以题目示例为例,对s进行遍历,将ch-'a'映射为record的索引,统计各字符出现次数。

ch a n a g r a m
   -'a' 0 13 0 6 17 0 12

统计结果为

   0 ... 6 ... 13 ...  17 ... 26
record  3 ... 1 ... 1 ... 1 ... 0

然后遍历另一个字符串,如果出现record中相应字符就进行减操作,最后record所有记录都为0,即两个字符串互为字母异位词。

 

复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        int[] record = new int[26];//a-z小写字母

        for (int i = 0; i < s.length(); i++) {
            record[s.charAt(i) - 'a']++;//遍历第一个字符串,统计各字符出现频率
        }

        for (int i = 0; i < t.length(); i++) {
            record[t.charAt(i) - 'a']--;//遍历第二个字符串,对各字符做减少操作
        }
        
        for (int count: record) {//如果record记录都为0,代表各字符统计数相等
            if (count != 0) { 
                return false;
            }
        }
        return true;
    }
}
复制代码

 

哈希表:

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

哈希表数据结构选择:
(1)数组:题目要求的数据空间较小,能确定
(2)set: 题目要求的数据空间较大
(3)map: 题目要求的数据有key-value结构

 

posted @   壹索007  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示