代码随想录-哈希表 | 242 有效的字母异位词

server/2024/10/18 19:28:27/

代码随想录-哈希表 | 242 有效的字母异位词

  • LeetCode 242-有效的字母异位词
    • 解题思路
    • 代码
    • 复杂度
    • 难点
    • 总结

LeetCode 242-有效的字母异位词

题目链接

题目描述

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

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

解题思路

判断

  • 暴力解法:两层for循环,同时记录字符是否重复出现,很明显时间复杂度是 O(n^2)。
  • 哈希表(数组):题目中只有小写字符,因此定义一个大小为26的数组record,记录字符串中每个字母出现的次数。
    • 先遍历字符串s,用 record 记录每个字母出现的次数。因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。遍历时,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值即可。
    • 再遍历字符串t,对t中出现的字符映射哈希表索引上的数值再做-1的操作。
    • 最后,record数组如果有的元素不为零0,说明字符串s和t一定是谁多了字符或者谁少了字符,return false。如果record数组所有元素都为零0,说明字符串s和t是字母异位词,return true。

代码

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']++;}for (int i = 0; i < t.length(); i++) {record[t.charAt(i) - 'a']--;}for (int count : record) {if (count != 0) {return false;}}return true;}
}

复杂度

  • 时间复杂度
    时间复杂度为O(n)
  • 空间复杂度
    ∵ 定义是的一个常量大小的辅助数组
    O(1)

难点

  • 如何记录并比较字符串中重复字符的个数:这个题目给出了一个很好的思路,用一个辅助数组去记录其中一个字符串中各个字符出现的次数,并在遍历另一个数组的时候,直接减去辅助数组中对应字符的次数,最终通过辅助数组26个索引位置的计数值判断两个字符串的重复字符的数量是否相同。

总结

学习到新知识:巧用辅助数组。复习了哈希表的思想。


http://www.ppmy.cn/server/15316.html

相关文章

力扣-70爬楼梯

思路&#xff1a; 解决爬楼梯问题&#xff0c;其中 n 表示楼梯的阶数。问题的描述是&#xff1a;每次可以爬1个或2个台阶&#xff0c;问有多少种不同的方法可以爬到楼梯的顶部。 算法思路如下&#xff1a; 初始时&#xff0c;设定变量 a 和 b 分别表示爬到当前阶数所需的步数…

【函数式接口使用✈️✈️】配合策略模式实现文件处理的案例

目录 &#x1f378;前言 &#x1f37b;一、功能描述 &#x1f37a;二、面向对象设计模式 &#x1f379;三、策略模式 &#x1f366;四、策略 VS 面向对象 &#x1f368;章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上周初步了解了下函数式接口&#xff0c;Consume…

AIGC实战——基于Transformer实现音乐生成

AIGC实战——基于Transformer实现音乐生成 0. 前言1. 音乐生成的挑战2. MuseNet3. 音乐数据3.1 巴赫大提琴组曲数据集3.2 解析 MIDI 文件3.3 分词3.4 创建训练数据集 4. MuseNet 模型4.1 正弦位置编码4.2 多输入/输出 5. 音乐生成 Transformer 的分析6. 多声部音乐分词6.1 网格…

Python 0基础_变现_38岁_day 15(匿名函数)

匿名函数&#xff1a; 不用定义函数名&#xff0c;无需使用def关键字&#xff0c;使用lambda将函数写成一行&#xff1b;#使用匿名函数定义一个两个数字相加的函数add lambda x,y : xy #使用变量接收匿名函数的内容&#xff0c;且变量名作为调用函数的变量名&#xff1…

tcp客户端向tcp服务器发送json文件,服务器转存为json文件

客户端&#xff1a; void socket::send_msg(QString file_name) {qDebug() <<"socket::send_msg(QString file_name):" << QThread::currentThread();//读取json文件QFile file(file_name); // fileName文件的路径if (file.open(QIODevice::ReadOnly)) …

vue快速入门(三十八)v-modle简化父子组件的数据双向绑定

注释很详细&#xff0c;直接上代码 上一篇 新增内容 v-model 原理解析v-model 组件双向绑定示范 源码 MyTest.vue <template><div id"MyTest"><select :value"value" change"handleChange"><option value"广东"…

Redis系列:内存淘汰策略

1 前言 通过前面的一些文章我们知道&#xff0c;Redis的各项能力是基于内存实现的&#xff0c;相对其他的持久化存储&#xff08;如MySQL、File等&#xff0c;数据持久化在磁盘上&#xff09;&#xff0c;性能会高很多&#xff0c;这也是高速缓存的一个优势。 但是问题来了&am…

【ES】springboot集成ES

1. 去Spring官方文档确认版本兼容性 这一版的文档里没有给出springboot的版本对应&#xff0c;但我在一个博主的文章里看到的es8.0以前的官方文档中就有给出来&#xff0c;所以还需要再去寻找spring framework和springboot的对应关系&#xff1f;&#xff1f;&#xff1f; 还…