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

15-算法打卡-哈希表-有效的字母异位词-leetcode(242)-第十五天

1 题目地址

242. 有效的字母异位词 - 力扣(LeetCode)242. 有效的字母异位词 - 给定两个字符串 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 仅包含小写字母 进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?https://leetcode.cn/problems/valid-anagram/description/


2 题目说明

给定两个字符串 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 仅包含小写字母

3 解题思路

方式一: 定义一个数组叫做record用来上记录字符串s里字符出现的次数。然后遍历字符串s查找record对应下标的数据-1;最后遍历record如果都等于0则是异位词,否则不是。
       a、s和t仅包含小写字母
        b、26个字母,record长度可以定义成26, [0,25]
        c、s[i] - 'a'; 可以得到对应的record下标,给值+1
        d、 t[i] - 'a';可以得到对应的record下标,给值-1

方式二: 可以使用Map存储s的数据,key是字符比如‘a’, value: 表示对应的数量;字符串t分割后,去Map中查找对应的数据,并将value-1,查找不到则不是异位词。否则Map为空也表示是异位词


4 代码编写


4.1 哈希(数组)实现

注意:字符串长度计算是length方法,数组长度计算是length属性;字符串指定位置的字符是chatAt方法

class Solution {public boolean isAnagram(String s, String t) {int[] record = new int[26];for (int i=0; i<s.length(); i++) {int index = s.charAt(i) - 'a';record[index]++;}for (int i=0; i<t.length(); i++) {int index = t.charAt(i) - 'a';record[index]--;}for (int i=0; i<record.length; i++) {if (record[i]!=0) {return Boolean.FALSE;}}return Boolean.TRUE;}
}


4.2 Map实现

class Solution {public boolean isAnagram(String s, String t) {Map<Character, Integer> tempMap = new HashMap<>();for (int i=0; i<s.length(); i++) {char c = s.charAt(i);if (tempMap.containsKey(c)) {int a  = tempMap.get(c) + 1;tempMap.put(c, a);} else {tempMap.put(c, 1);}}for (int i=0; i<t.length(); i++) {char c = t.charAt(i);if (tempMap.containsKey(c)) {int a = tempMap.get(c)-1;if (a==0) {tempMap.remove(c);} else {tempMap.put(c, a);}} else {return Boolean.FALSE;}}if (tempMap==null || tempMap.isEmpty()) {return Boolean.TRUE;}return Boolean.FALSE;}
}

 

相关文章:

  • 通信安全员历年考试重难点有哪些?
  • 从0开始掌握动态规划
  • 跟康师傅学Java-面向对象(基础)
  • 秒杀系统解决两个核心问题的思路方法总结:1.库存超卖问题;2.用户重复抢购问题。
  • linux 内核 container_of 宏的原理
  • 批量上传OpenStack镜像
  • python中参数前**的含义
  • 数据结构-前缀树
  • 【Vue 2中的emits声明与Vue 3的defineModel宏函数详解】
  • 蓝牙网关的功能与应用场景
  • Doris的向量化执行如何支撑分布式架构和复杂查询
  • 深度剖析:生成式人工智能备案和登记的关键差异
  • 【HFP】深入解析蓝牙 HFP 协议中呼叫转移、呼叫建立及保持呼叫状态的机制
  • 【强内核论】(6) 核心竞争力:价格不是决定成交的主要因素 | 决定对方买单的是人设 | 老陈头 | 数字游牧社
  • 采用若依vue 快速开发系统功能模块
  • 安全测试的全面知识体系及实现路径
  • visual studio 2022更改项目名称,灾难性故障(异常来自HRESULT)
  • [dp16_两个数组] 通配符匹配 | 交错字符串 | 两个字符串的最小ASCII删除和
  • Linux中NFS服务设置
  • 3.学习笔记--Spring-AOP总结(p39)-Spring事务简介(P40)-Spring事务角色(P41)-Spring事务属性(P42)
  • 发布亮眼一季度报后,东阿阿胶股价跌停:现金流隐忧引发争议
  • 对谈|李钧鹏、周忆粟:安德鲁·阿伯特过程社会学的魅力
  • 赛力斯拟赴港上市:去年扭亏为盈净利59亿元,三年内实现百万销量目标
  • 荣盛发展去年亏损约84.43亿元,要“过苦日子、紧日子”
  • “十四五”以来少数民族发展资金累计下达边疆省区252亿元
  • 日均新开三家“首店”,上海的“首发经济”密码是什么?