当前位置: 首页 > news >正文

有效的字母异位词 | LeetCode-242 | 哈希集合 | 哈希数组

🙋大家好!我是毛毛张!
🌈个人首页: 神马都会亿点点的毛毛张
🍭在字符串中,如果能使用哈希集合🥗,那么大概率也能使用哈希数组🍬

LeetCode链接:242. 有效的字母异位词

文章目录

  • 1.题目描述🥨
  • 2.题解🧀
    • 2.1 哈希集合🧆
    • 2.2 哈希数组🍖
    • 2.3 暴力解法🥀

1.题目描述🥨

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 < = s . l e n g t h , t . l e n g t h < = 5 ∗ 1 0 4 1 <= s.length, t.length <= 5 * 10^4 1<=s.length,t.length<=5104
  • st 仅包含小写字母

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

2.题解🧀

2.1 哈希集合🧆

class Solution {public boolean isAnagram(String s, String t) {// 使用哈希表来记录每个字符的频率Map<Character, Integer> map = new HashMap<>();// 遍历字符串 s,将每个字符的频率存入哈希表中for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);// 如果字符已存在于哈希表中,频率加 1;否则将其频率设为 1map.put(c, map.getOrDefault(c, 0) + 1);}// 遍历字符串 t,减少哈希表中每个字符的频率for (int i = 0; i < t.length(); i++) {char c = t.charAt(i);// 如果字符已存在于哈希表中,频率减 1;否则将其频率设为 -1map.put(c, map.getOrDefault(c, 0) - 1);}// 检查哈希表中每个字符的频率Set<Map.Entry<Character, Integer>> entries = map.entrySet();for (Map.Entry<Character, Integer> entry : entries) {// 如果任意字符的频率不为 0,则说明两个字符串不是字母异位词if (entry.getValue() != 0) return false;}// 如果所有字符的频率都为 0,则说明两个字符串是字母异位词return true;}
}
  • 图解:https://leetcode.cn/problems/valid-anagram/solutions/1/242-you-xiao-de-zi-mu-yi-wei-ci-ha-xi-bi-cch7/

2.2 哈希数组🍖

  • 由于这道题目具有特殊性,只有小写字母,所有转化成哈希数组来做
class Solution {public boolean isAnagram(String s, String t) {// 创建一个长度为 26 的整型数组,用于存储每个字母的出现频率int[] chs = new int[26];// 遍历字符串 s,统计每个字母的出现频率for(int i = 0; i < s.length(); i++) {// 计算字符对应的数组索引,并增加相应位置的计数chs[s.charAt(i) - 'a']++;}// 遍历字符串 t,减少每个字母的出现频率for(int i = 0; i < t.length(); i++) {// 计算字符对应的数组索引,并减少相应位置的计数chs[t.charAt(i) - 'a']--;}// 检查数组中的每个计数是否为 0for(int i = 0; i < chs.length; i++) {// 如果有任意一个计数不为 0,表示 s 和 t 不是字母异位词if(chs[i] != 0) return false;}// 如果所有计数都为 0,表示 s 和 t 是字母异位词return true;}
}

2.3 暴力解法🥀

class Solution {public boolean isAnagram(String s, String t) {// 如果两个字符串的长度不同,它们不可能是字母异位词,直接返回 falseif (s.length() != t.length()) {return false;}// 将字符串 s 和 t 转换为字符数组char[] strs = s.toCharArray();char[] strt = t.toCharArray();// 对两个字符数组进行排序Arrays.sort(strs);Arrays.sort(strt);// 比较排序后的字符数组是否相等return Arrays.equals(strs, strt);}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LNMP环境搭建论坛
  • 【论文解读】Performance comparison among popular implementations of H.264 encoders
  • 【Bug分析】Keil报错:error: #18:expected a “)“问题解决
  • OpenGL入门一:基础知识及概念
  • [C++] 深入理解面向对象编程特性 : 继承
  • 大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
  • Network Address Translation,网络地址转换技术
  • 探索HTML5新特性:创建一个多媒体网页
  • Spring Boot 整合 SA-Token 使用详解
  • C++中`vector和tuple`的联合使用和访问方法
  • 一文读懂什么是Go语言goroutine
  • 网络编程先验知识2
  • 全球化系统设计:多时区处理
  • 代理ip池的ip是重复利用的吗?
  • 安卓App开发 篇二:Android UI和布局
  • __proto__ 和 prototype的关系
  • Angular6错误 Service: No provider for Renderer2
  • angular学习第一篇-----环境搭建
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Java Agent 学习笔记
  • 不上全站https的网站你们就等着被恶心死吧
  • 程序员该如何有效的找工作?
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 我这样减少了26.5M Java内存!
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #pragma预处理命令
  • #在 README.md 中生成项目目录结构
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (007)XHTML文档之标题——h1~h6
  • (a /b)*c的值
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (第30天)二叉树阶段总结
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (已解决)什么是vue导航守卫
  • (原)本想说脏话,奈何已放下
  • (转)为C# Windows服务添加安装程序
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core中如何集成RabbitMQ
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net wcf memory gates checking failed
  • .net 受管制代码
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET程序员迈向卓越的必由之路
  • @requestBody写与不写的情况
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [C++] 深入理解面向对象编程特性 : 继承
  • [JAVASE] 异常 与 SE阶段知识点补充