首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >可视化图解算法65:有效的字母异位词

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

原创
作者头像
用户11589437
发布2025-10-23 15:56:45
发布2025-10-23 15:56:45
1030
举报

1.题目

描述

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

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

示例 1:

代码语言:javascript
复制
输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

代码语言:javascript
复制
输入: 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为有效的字母异位词。

如果文字描述的不太清楚,你可以参考视频的详细讲解:B站@好易学数据结构

3.编码实现

核心代码如下:

代码语言:go
复制
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)来解答问题。

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

✅ 链表

✅ 二叉树

✅ 二分查找、排序

✅ 堆、栈、队列

✅ 回溯算法

✅ 哈希算法

✅ 动态规划

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. 题解思路
  • 3.编码实现
  • 4.总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档