Leetcode刷题 由浅入深之哈希表——242. 有效的字母异位词

目录

(一)字母异位词的C++实现

写法一(辅助数组)

(二)复杂度分析

时间复杂度

空间复杂度

(三)总结


【题目链接】242.有效的字母异位词 - 力扣(LeetCode)

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length, t.length <= 5 * 104

  • s 和 t 仅包含小写字母

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

(一)字母异位词的C++实现

写法一(辅助数组)

解题思路:

字母异位词的意思是两个词语中的字母和字母出现次数 都是相同 的,我们可以定义一个整型的辅助数组,用来存储每一个字母出现的次数。为了涵盖所有的测试样例,需要设置一个长度至少为26的数组并初始化为0。

接着,分别遍历两个字符串中的字符,如果出现对应字母,对数组中的数值进行相应的修改。最后循环判断数组的每一个元素是否为0(在修改时一个字符串是+1,另一个字符串是-1,因此当为零时说明两个字符串中都没有出现 或者是都出现且数量相等)。

在本题中,s 和 t 仅包含小写字母,因此,我们采用相对位置对数组进行访问即可。

cpp 复制代码
class Solution {
public:
    bool isAnagram(string s, string t) {
        vector<int> list(26, 0);
        for(auto i : s)
            list[i-'a']++;    //i-'a' 采用相对位置对数组元素进行访问
        for(auto j : t)
            list[j-'a']--;
        for(auto k : list){
            if(k != 0)
                return false;
        }
        return true;
    }
};

(二)复杂度分析

时间复杂度

整个算法的时间复杂度取决于字符串 s 和 t 的长度,总体时间复杂度为 。通常情况下,若两个字符串长度相等,设长度为 n,则时间复杂度可简化为 。

空间复杂度

该算法使用了一个长度为 26 的 vector<int> 数组 list 来存储每个字母的出现次数 。无论输入字符串的长度如何,这个数组的大小始终是固定的 26,不随输入规模的增大而增大。所以,空间复杂度为。

(三)总结

(1)辅助数组 思想的应用,也就是哈希表。

(2)在本题中s 和 t 仅包含小写字母,可以尝试解决包含 unicode 字符该如何处理。

学习中,诚挚希望有心者指正和交流,经验或者方法都可。

相关推荐
水饺编程几秒前
第1章,[Win32 章节]:Windows 的方方面面
c语言·c++·windows·visual studio
镜子AI3 分钟前
教培机构多模态内容跨模态检索系统:基于CLIP的统一表征与图文混合召回算法
人工智能·python·算法·机器学习
小宋102114 分钟前
合成评测集怎么造才不“自嗨”:自动出题、去重、泄漏检测与人工抽检
人工智能·算法·机器学习
蒸蒸yyyyzwd27 分钟前
秋招笔记day58
算法·哈希算法
Jasmine_llq37 分钟前
《P5663 [CSP-J 2019] 加工零件》
数据结构·算法·bfs·广度优先搜索·分层 bfs /·奇偶分层最短路·奇数最短步数
在所不辞兄1 小时前
分层PINN提升多物理场一致性
人工智能·神经网络·算法·机器学习·工程仿真
wanderist.1 小时前
CSP 第43次认证 T4:集合划分 —— 图染色与二分图判定
算法·图论
不做无法实现的梦~1 小时前
基于 PX4 的全仓库架构、无人机算法解析与开发学习规划
算法·架构·无人机
悠仁さん1 小时前
【C++】auto
java·前端·c++
做cv的小昊1 小时前
【大模型算法自学笔记01】NLP基础知识(1.1 自注意力)
人工智能·笔记·算法·自然语言处理·大模型·llm