力扣242.有效的字母异位词(Java语言,排序法、散列表法)

news2024/11/16 4:11:24

题目描述:

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

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
在这里插入图片描述

解题思路:

思路1:排序法

根据题目意思,判断两个字符串是否为有效字母异位词就是*判断它们的字母出现次数是否相同!*由此我们可以想到我们一个个比较不就行了吗,在此基础上我们可以又联想到两个方向:

1.较常见的映射关系用散列表解决(思路2)
2.我们暴力一些,先将两个字符串排好序,再将比较两个字符串,相同则返回true否则false

思路2:散列表法

我们以两个字符串的字符作为键,出现的次数作为值,进行统计比较(此处我不重点分析解题的大体逻辑,而是重点由此题分享用java语言散列表解题时的常用技巧,对于其他语言大家可以根据自己所学语言的特性实现,思路都是相同的!!!)
对于在使用散列表解题时一般都有两种方法:

1.手动利用数组实现散列表(具体根据题目的需求将数组的索引对应索引存储的值作为键和值)
2.利用语言提供的接口自己根据定义合理选定键与值(Java中常用HashMap)

对于本题目:

1.若我们手动维护一个散列表(本题目所有的字母是小写),我们常用的技巧是获取每个字符的ASCLL码值并减去小写字母a的ASCLL码值作为数组的索引即作为散列表的键(用此技巧的目的就是更有效的利用数组空间即我们不必开辟太大的空间以至于造成浪费),然后先遍历字符串s,再让每个对应位置的数值加一;再遍历字符串t,让每个对应位置的数值减去1,最后遍历判断数组,若有位置的数值小于0则返回false否则返回true
2.若我们使用HashMap接口(大体思路不再赘述,和1思想一样,具体分享技巧),我们常用一个getOrDefault(key,defaultValue)方法(当map中存在键时值为自己设定的默认值defaultValue),在此基础上,若我们常进行此操作(用于统计和最后的比较):

自定义的Hashmap.put(key,自定义的Hashmap.getOrDefault(key,defauliValue) +或者- int值)

代码:

思路1:

class Solution {
	//Sort
	//Time Complexity: O(NlogN)
	//Space Complexity: O(N)
	public boolean isAnagram(String s, String t) {
		if (s.length() != t.length()) {
			return false;
		}
		char[] arrS = s.toCharArray();
		char[] arrT = t.toCharArray();
		Arrays.sort(arrs);
		Arrays.sort(arrT);
		return Arrays.equals(arrS,arrT);
	}
}

思路2:

(1):

class Solution {
	//HashTable
	//Time Complexity: O(N)
	//Space Complexity: O(M)(此处M为26)
	public boolean isAnagram(String s, String t) {
		if (s.length() != t.length()) {
			return false;
		}
		int[] table = new int[26];
		//先遍历s,对应索引位置++
		for (int i = 0; i < s.length(); i++) {
			table[s.charAt(i) - 'a']++;
		}
		//再遍历t,对应索引位置--
		for (int j = 0; j < t,length(); j++) {
			table[t.charAt(j) - 'a']--;
		}
		//遍历table
		for (int k = 0; k < table.length; k++) {
			if (table[k] < 0) {
				return false;
			}
		}
		return true;
	}
}

(2):

class Solution {
	//HasMap
	//Time Complexity: O(NlogN)
	//Space Complexity: O(M)
	public boolean isAnagram(String s, String t) {
		if (s.length() != t.length()) {
			return false;
		}
		HashMap<Character, Integer> map = new HashMap<>();
		for (int i = 0; i < s.length(); i++) {
			char charS = s.charAt(i);
			map.put(charS, map.getOrDefault(charS,0) + 1);
		}
		for (int j = 0; j < t.length(); ++j) {
            char charT = t.charAt(j);
            map.put(charT,map.getOrDefault(charT,0) - 1);
            //判断
            if (map.get(charT) < 0) {
                return false;
            }
        }
        return true;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计SSM基于微信的基层党建信息系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

容量测试解决了什么问题?

前面几篇性能测试知识科普系列的文章&#xff0c;介绍了性能测试中的核心术语和指标、常用测试策略、压测工具选型、性能需求分析、测试能力分层、新手学习路径以及监控分析工具相关的内容&#xff0c;这些知识可以说是性能测试最基本的能力&#xff0c;也是日常工作中需要经常…

三大宇宙速度

文章目录第一宇宙速度&#xff1a;7.9km/s第二宇宙速度&#xff1a;11.2km/s第三宇宙速度&#xff1a;16.7km/s光年太阳系第一宇宙速度&#xff1a;7.9km/s 1.第一宇宙速度(环地飞行速度)&#xff1a;航空器绕地球飞行&#xff0c;成为地球卫星的最低速度。 2.提出者牛顿。基于…

springcloud-05分布式事务

第五章 分布式事务Seata 在微服务系统中&#xff0c;分布式事务是我们必须要面临和解决的问题&#xff01;&#xff01;&#xff01; 1. 分布式事务问题的产生 下图中的例子可以很好的解释分布式事务问题出现的场景&#xff1a; 图中问题的产生就在于更新库存数量是1个单独…

泛型Java

泛型 泛型&#xff1a;标签 集合接口和集合类在jdk5.0之后都修改为带泛型的结构在实例化集合类时&#xff0c;可以指明具体的泛型类型指明完以后&#xff0c;在集合类或者集合接口中凡是定义类或接口时&#xff0c;内部结构使用到泛型的位置&#xff0c;都指定为实例化时的泛…

Java姓名与手机号中间用*号代替 字符串*号替换

/*** 姓名与手机号中间用*号代替*/public static String caseStarSymbol(String nameStr){ // String nameStr "程序源码论坛"; // String mobile "15888888888";String nameStr1 null;char[] r nameStr.toCharArray(); // char[] m mobi…

服务器硬件规格常用查看命令——磁盘相关命令

smartctl smartctl是一个能够控制和监控磁盘的SMART&#xff08;Self-Monitoring&#xff0c;Analysis and Reporting Technology&#xff0c;自我监测、分析和报告技术&#xff09;命令。 使用方法&#xff1a; 提示&#xff1a;使用该命令只能查看到裸盘设备的型号信息&…

ATtiny13与Proteus仿真-开发与Proteus仿真环境搭建

ATtiny13开发与Proteus仿真环境搭建 本文将详细介绍如何搭建ATtiny13开发环境与Proteus仿真环境。 1、ATtiny13开发环境搭建 本系列文章将使用Microchip Studio作为ATtiny13的集成开发环境(IDE)。 Microchip Studio 是一个集成开发环境 (IDE),用于开发和调试 AVR 和 SAM 微…

Microsoft .NET Desktop Runtime (Framework)

Microsoft .NET Desktop Runtime (Framework) 微软NET Framework或数据库网络是一种软件技术&#xff0c;包括Microsoft的几种编程语言。安装每个窗口后所需的工具之一是NETFramework技术。会的。基于这种技术编写的许多软件工具&#xff0c;它们将得到支持。 -是的。 微软得分…

什么是运放的输入失调电压

大家可以看到这个电路&#xff0c;运放的同相端和反相端都接在0V&#xff0c;大家觉得运放的输出电压是多少。 很多同学觉得&#xff0c;在开环条件下根据运放的传输曲线&#xff0c;当同相端电压等于反相端电压时&#xff0c;运放的输出电压等于0&#xff0c; 可是实际测量运放…

语音识别之Kaldi:神经网络实战

ASR神经网络实战 kaldi语音识别理论与实践课程学习。 之前学习了基于GMM-HMM的传统语音识别&#xff1a;GMM-HMM 其中也包含Kaldi架构的简介&#xff0c;语音数据的预处理&#xff0c;特征提取等过程。 今天学习基于神经网络的语音识别。 神经网络训练脚本 以TDNN为例。 K…

Python IDE之 pycharm的十大奇技淫巧

说到Python的IDE&#xff0c;可能大家都会想到一个非常有名的工具&#xff0c;就是pycharm&#xff0c;他是最受欢迎的一个Python开发工具&#xff0c;其原因就是因为功能强大&#xff0c;适合构建大型项目&#xff0c;当然啦&#xff0c;功能强大同时也就意味着操作复杂&#…

语音学发音语音学笔记

词汇表 articulators 咬合架发音器 cochlea 耳蜗 consonants 元音 dialect 方言 eardrum 鼓膜 endolymph 内淋巴 Epiglottis 喉头盖 formants 共振峰 fricative 摩擦音 Larynx 喉 meatus 耳道 monosyllabic 单音节 pinna 耳廊 pitch 音调 pitch harmonics 音高泛音 phonation …

【云原生 | Kubernetes 实战】09、K8s 控制器 Replicaset 入门到企业实战应用

目录 K8s 控制器 Replicaset 一、Replicaset 控制器&#xff1a;概念、原理解读 1.1 Replicaset 概述 1.2 Replicaset 工作原理&#xff1a;如何管理 Pod &#xff1f; 二、Replicaset 资源清单文件编写技巧 三、Replicaset 使用案例&#xff1a;部署 Guestbook 留言板 …

第16章 母函数

第16章 母函数 母函数是离散数学领域最意外、最有用的发明之一。粗略来讲&#xff0c;母函数将序列问题转化为代数问题。 组合数学中常常出现普通型母函数、指数型母函数、狄利克雷型母函数 16.1 无穷级数 通俗地说,母函数F(x)就是无穷级数 符号[xnx^nxn]F(x)表示母函数F(x…

策略模式学习

0.引言 最近想整理一下代码。我的想法是使用继承的方案&#xff0c;使用多态写一个interface&#xff0c;然后不同的方法来继承它。最近ChatGPT比较火&#xff0c;顺便问了一下它&#xff1a; 在C代码设计中&#xff0c;我对同一算法设计了不同的实现&#xff0c;例如计算平均…

使用 Web 应用程序示例在 Java 中进行安全编码

使用 Web 应用程序示例在 Java 中进行安全编码 使用 Java 中的 Online Shop Web 应用程序示例了解最常见的漏洞以及如何避免它们 课程英文名&#xff1a;Secure coding Dive into Injections with Java & Spring boot 此视频教程共36.0小时&#xff0c;中英双语字幕&…

1x9 Dual SC Optical Transceivers

1、Pin Assignment & Description TD, TD-: DC coupled LVPECL inputs for the transmitter. 50Ω differential lines. RD, RD-: Open-emitter out circuits. DC coupled LVPECL outputs for the receiver. 50Ω differential lines. SD: Signal Detect. Normal opti…

【工业控制】多变量动态矩阵预测控制(DMC)【含Matlab源码 1499期】

⛄一、简介&#xff08;附课程报告&#xff09; 1引言 众所周知&#xff0c;上世纪 60 年代初形成的现代控制理论在航空、航天等领域取得了辉煌的成果。 然而人们不久就发现在完美的理论与控制之间还存在着巨大的鸿沟。主要表现在以下几个方面: 1.现代控制理论的基点是对象精确…

OneHotEncoder独热编码

首先了解机器学习中的特征类别&#xff1a;连续型特征和离散型特征。 拿到获取的原始特征&#xff0c;必须对每一特征分别进行归一化&#xff0c;比如&#xff0c;特征A的取值范围是[-1000,1000]&#xff0c;特征B的取值范围是[-1,1].如果使用logistic回归&#xff0c;w1*x1w2…