首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【LeetCode刷题日记】242.字母异位词

【LeetCode刷题日记】242.字母异位词

作者头像
北极的代码
发布2026-04-22 14:35:24
发布2026-04-22 14:35:24
400
举报

前言:前面我们已经学习了关于哈希表的相关知识并深入了解了哈希表的底层逻辑,这些都是面试的高频考点,现在我们具体在题目中应用这些知识!

题目背景:LeetCode242

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

示例 1:

代码语言:javascript
复制
输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

代码语言:javascript
复制
输入: s = "rat", t = "car"
输出: false

提示:

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

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

题目答案:
代码语言:javascript
复制
/**
 * 242. 有效的字母异位词 字典解法
 * 时间复杂度O(m+n) 空间复杂度O(1)
 */
class Solution {
    public boolean isAnagram(String s, String t) {
        int[] record = new int[26];

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

        for (int i = 0; i < t.length(); i++) {
            record[t.charAt(i) - 'a']--;
        }
        
        for (int count: record) {
            if (count != 0) {               // record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。
                return false;
            }
        }
        return true;                        // record数组所有元素都为零0,说明字符串s和t是字母异位词
    }
}
题目解析:

先看暴力的解法,两层for循环,同时还要记录字符是否重复出现,很明显时间复杂度是 O(n^2)。

暴力的方法这里就不做介绍了,直接看一下有没有更优的方式。

数组其实就是一个简单哈希表,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。

由于我们要记录字母,一共有26个字母,所以我们创建的数组大小也就是26,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值。

关于操作步骤如图:

定义一个数组叫做record用来上记录字符串s里字符出现的次数。

需要把字符映射到数组也就是哈希表的索引下标上,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。

再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数,统计出来了。

这里具体说明一下:

代码语言:javascript
复制
 record[s.charAt(i) - 'a']++;  

关于这个操作,首先调用charAt()方法,拿到字符串的第i个字符 然后-'a',实际是减去a的ACII码值,所以结果一定是0-25之间的,因为最小只能是a,最大是z,将这个整数当成字母的下标 此时record[]这个整体代表record[0] ,然后后面自增,这个位置的值就变成1了,因为设置数组的时候,默认26个位置都是0,所以把数值自增,或者自减都是加1或者减1。 之后同一个道理,同一位置,之后进行自减,如果是相同的字母,那必定就是在record的同一位置,之后自减。

结语:如果对你有帮助,请点赞,关注,收藏,你的支持就是我最大的帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目背景:LeetCode242
    • 题目答案:
    • 题目解析:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档