刷题笔记-242. 有效的字母异位词

94 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

一、题目描述:

242. 有效的字母异位词 - 力扣(LeetCode)

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

注意:若 st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length, t.length <= 5 * 10^4
  • s 和 t 仅包含小写字母  

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

二、思路分析:

字母异位词:指字母相同,但是排列顺序不同的字符串。

  1. 当字符串长度不同时,可提前结束判断
  2. 题目条件:两个字符串中含有的字符均为小写英文字母
  3. 同时遍历两个字符串,统计每个字符出现的次数
  4. 对字符串s中出现的字符次数进行+1
  5. 对字符串t中出现的字符次数进行-1
  6. 判断26个小写字母的次数是否为0

三、AC 代码:

#define ARRAY_SIZE 26

bool isAnagram(char * s, char * t){
    int statis[ARRAY_SIZE] = {0};
    int s_len = strlen(s);
    int t_len = strlen(t);
    int i = 0;

    if (s_len != t_len)
    {
        return false;
    }

    for (i = 0; i < s_len; i++)
    {
        statis[s[i] - 'a']++;
        statis[t[i] - 'a']--;
    }

    for (i = 0; i < ARRAY_SIZE; i++)
    {
        if (0 != statis[i])
        {
            return false;
        }
    }

    return true;
}

四、参考:

猿来绘(逻辑清晰,简单易懂)-从暴力到哈希,不是哈希?-242. 有效的字母异位词 - 有效的字母异位词 - 力扣(LeetCode) (leetcode-cn.com)

ACM 选手图解 LeetCode 有效的字母异位词 | 编程文青李狗蛋 - 有效的字母异位词 - 力扣(LeetCode)

执行用时: 0 ms , 在所有 C++ 提交中击败了 100.00% 的用户 内存消耗: 7 MB , 在所有 C++ 提交中击败了 87.84% 的用户 - 有效的字母异位词 - 力扣(LeetCode)