129.哈希表:有效的字母异位词(力扣)

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

题目描述

代码解决以及思路

这个方法的时间复杂度为O(N),其中N是字符串的长度,空间复杂度为O(1)(因为辅助数组的大小是固定的26)。

cpp 复制代码
class Solution {
public:
    bool isAnagram(string s, string t) {
        // 创建一个大小为26的整数数组,用于存储每个字母的出现次数
        int hash[26] = {0};
        
        // 遍历字符串s,将每个字母的出现次数记录在hash数组中
        for (int i = 0; i < s.size(); i++) {
            // 并不需要记住字符'a'的ASCII值,只需要求出一个相对数值即可
            hash[s[i] - 'a']++;
        }
        
        // 遍历字符串t,将每个字母的出现次数从hash数组中减去
        for (int i = 0; i < t.size(); i++) {
            hash[t[i] - 'a']--;
        }
        
        // 检查hash数组,如果有任何一个位置不为0,说明两个字符串不是字母异位词
        for (int i = 0; i < 26; i++) {
            if (hash[i] != 0) {
                return false; // 发现字母计数不匹配,返回false
            }
        }
        
        // 所有字母计数都为0,说明两个字符串是字母异位词,返回true
        return true;
    }
};

isAnagram函数接受两个字符串st作为参数,并返回一个布尔值,指示这两个字符串是否为字母异位词。

函数使用一个长度为26的整型数组hash来存储每个字符(假设为小写字母)的出现次数。数组的每个索引对应于一个字母(例如,索引0对应于'a',索引1对应于'b',依此类推)。

首先,遍历字符串s,对于每个字符,将其ASCII码值减去'a'的ASCII码值,得到一个相对数值,然后增加数组hash中对应索引的计数。

接着,遍历字符串t,对于每个字符,执行相同的操作,但减少数组hash中对应索引的计数。

最后,遍历数组hash,检查所有计数是否为零。如果所有计数都为零,则说明两个字符串包含相同的字符,且每个字符的出现次数相同,因此它们是字母异位词,函数返回true。如果任何计数不为零,则说明两个字符串不是字母异位词,函数返回false

相关推荐
故事还在继续吗1 分钟前
DPDK 教程(三):多队列 + RSS + 多 worker 的最小转发 / Echo
算法·哈希算法·dpdk
AI科技星3 分钟前
全域数学·体积与表面积通项定理【乖乖数学】
人工智能·算法·数学建模·数据挖掘·机器人
Yingjun Mo8 分钟前
1. 在线学习引言
学习·算法
李日灐11 分钟前
< 12 > Linux进程:进程虚拟地址空间机制 —— 内存管理的美学
linux·运维·算法
Mr_pyx20 分钟前
LeetCode 226. 翻转二叉树(多种解法详解)
算法·深度优先
qeen8720 分钟前
【算法笔记】各种常见排序算法详细解析(上)
c语言·数据结构·c++·学习·算法·排序算法
绿蕉22 分钟前
自动驾驶技术的演进之路:从规则算法到端到端架构
算法·架构·自动驾驶
Ulyanov23 分钟前
《从质点到位姿:基于Python与PyVista的导弹制导控制全栈仿真》: 基石——3-DOF质点弹道的高保真建模与数值稳定性分析
开发语言·python·算法·ui·系统仿真
一条大祥脚27 分钟前
蚁群算法(例题TSP问题)
算法
青山师27 分钟前
数组与链表深度解析:从内存布局到工业级实践
数据结构·算法·链表·数组·算法与数据结构