1.题目
描述
给定两个字符串 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
仅包含小写字母
2. 题解思路
对于字母异位词 来说,字符串s中出现的字符在字符串t中都需要出现,不能多也不能少。因此可以通过一个map来实现,具体思路是:
-
定义一个哈希表(map);key为字符,value为字符出现的次数(默认值为0);
-
遍历字符串s,哈希表中存储的是s对应字符出现的次数;
-
遍历字符串t,字符每出现一次,在哈希表中将值减1;
-
遍历哈希表,如果哈希表中对应字符的值都为0,则s与t为有效的字母异位词。
如果文字描述的不太清楚,你可以参考视频的详细讲解。
- Python版本:https://www.bilibili.com/cheese/play/ep1374984
- Java版本:https://www.bilibili.com/cheese/play/ep1368274
- Golang版本:https://www.bilibili.com/cheese/play/ep1368658
3.编码实现
核心代码如下:
func isAnagram(s string, t string) bool {//1.定义一个哈希表(map);key为字符,value为字符出现的次数(默认值为0)hashTable := make(map[uint8]int)//2.遍历字符串s,哈希表中存储的是s对应字符出现的次数;对于map来说,key不存在,value默认为零值(int:0,string:空)for i := 0; i < len(s); i++ {hashTable[s[i]]++}//3.遍历字符串t,字符每出现一次,在哈希表中将值减1for j := 0; j < len(t); j++ {hashTable[t[j]]--}//4.遍历哈希表,如果哈希表中对应字符的值都为0,则s与t为有效的字母异位词for _, v := range hashTable {if v != 0 {return false}}return true
}
具体完整代码你可以参考下面视频的详细讲解。
- Python版本:https://www.bilibili.com/cheese/play/ep1374984
- Java版本:https://www.bilibili.com/cheese/play/ep1368274
- Golang版本:https://www.bilibili.com/cheese/play/ep1368658
4.总结
本题的关键是理解题目的含义(字母异位词),并想到通过哈希表(map)来解答问题。
《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:
✅ 链表
✅ 二叉树
✅ 二分查找、排序
✅ 堆、栈、队列
✅ 回溯算法
✅ 哈希算法
✅ 动态规划
无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!
- Python编码实现:https://www.bilibili.com/cheese/play/ss897667807
- Java编码实现:https://www.bilibili.com/cheese/play/ss161443488
- Golang编码实现:https://www.bilibili.com/cheese/play/ss63997
对于LeetCode数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。
今日佳句:燕赵多佳人,美者颜如玉。