可视化图解算法65:有效的字母异位词

1.题目

描述

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

字母异位词 是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用所有原始字母一次。

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • st 仅包含小写字母

2. 题解思路

对于字母异位词 来说,字符串s中出现的字符在字符串t中都需要出现,不能多也不能少。因此可以通过一个map来实现,具体思路是:

  1. 定义一个哈希表(map);key为字符,value为字符出现的次数(默认值为0);

  2. 遍历字符串s,哈希表中存储的是s对应字符出现的次数;

  3. 遍历字符串t,字符每出现一次,在哈希表中将值减1;

  4. 遍历哈希表,如果哈希表中对应字符的值都为0,则s与t为有效的字母异位词。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

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,字符每出现一次,在哈希表中将值减1
	for j := 0; j < len(t); j++ {
		hashTable[t[j]]--
	}
	//4.遍历哈希表,如果哈希表中对应字符的值都为0,则s与t为有效的字母异位词
	for _, v := range hashTable {
		if v != 0 {
			return false
		}
	}
	return true
}

具体完整代码你可以参考下面视频的详细讲解。

4.总结

本题的关键是理解题目的含义(字母异位词),并想到通过哈希表(map)来解答问题。

分割线

《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:

  ✅   链表

  ✅   二叉树

  ✅   二分查找、排序

  ✅   堆、栈、队列

  ✅   回溯算法

  ✅   哈希算法

  ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

对于LeetCode数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:燕赵多佳人,美者颜如玉。

posted @ 2025-10-23 15:40  好易学数据结构  阅读(4)  评论(0)    收藏  举报