力扣题目链接

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

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

思路

比较

直接对两个字符串进行排序,然后比较,相同结果为true,不同则为false

哈希表

使用两个哈希表,key是字符,value是出现次数,然后比较两个哈希表。

哈希表(进阶)

这是从官方题解看到的,比我的好;

用26个字母的相对位置做下标,对应元素存储字母出现次数。

bool isAnagram(char* s, char* t) {
    int len_s = strlen(s), len_t = strlen(t);
    if (len_s != len_t) {
        return false;
    }
    int table[26];
    memset(table, 0, sizeof(table));
    for (int i = 0; i < len_s; ++i) {
        table[s[i] - 'a']++;
    }
    for (int i = 0; i < len_t; ++i) {
        table[t[i] - 'a']--;
        // 如果出现table[i]<0,则说明t包含一个不在s中的额外字符,返回false即可。
        // 不需遍历完整字符串
        if (table[t[i] - 'a'] < 0) {
            return false;
        }
    }
    return true;
}
最后修改:2024 年 11 月 05 日
如果觉得我的文章对你有用,请随意赞赏