面试经典150题——同构字符串

"Dream big and dare to fail." - Norman Vaughan

houses near valley with trees

1. 题目描述

2.  题目分析与解析

2.1 思路一

看见这个题目的第一反应就是使用一个hash表,用来存储映射关系,具体思路如下:

  1. 首先二者要是同构的长度肯定是得相同的,但是注意到提示有说明了

  2. 然后我们就可以用一个映射表,遍历s字符串的每一个字符,将它匹配到t对应的位置的字符

  3. 如果在遍历s字符串的某一个字符时发现这个字符在hash表中没有存在,那么就把s中的这个字符作为键,t中相应的字符作为值,放入hash表

  4. 如果在遍历s字符串的某一个字符时发现这个字符在hash表中存在,查看其对应的值,如果和t中对应位置的字符不相等,就说明映射失败,返回false

  5. 如果遍历完所有的s的字符,都没有返回false,说明满足映射,返回true。

提交后我发现出现问题了:

看见字符串我一下就想起了忘了题目中的条件:

也就是说在映射过程中即使满足映射表中不存在这个键,我们也不能将将s.charAt(i)和t.charAt(i)存入mappingMap中,因为要满足不同字符不能映射到同一个字符上。因此我们还需要加一点条件:

  • 当mappingMap中不包含s.charAt(i),说明不存在该映射,这时我们应该先判断mappingMap.containsValue(t.charAt(i)),因为不同字符不能映射到同一个字符。

  • 如果mappingMap.containsValue(t.charAt(i))返回true,说明不同的s字符映射到了同一个t的字符,返回false

  • 如果mappingMap.containsValue(t.charAt(i))返回false,说明不同的s字符映射到了不同的t的字符,这时才可以将该映射加入映射表

3. 代码实现

3.1 思路一——哈希表

4. 相关复杂度分析

  • 时间复杂度O(N),其中N是字符串st的长度。这是因为算法需要遍历整个字符串一次,每个字符都进行一次查找、插入或比较操作。虽然对于HashMap的查找和插入操作平均时间复杂度是O(1),但这里还包括了对HashMapcontainsValue方法的调用,这个操作在最坏情况下的时间复杂度是O(k),其中k是映射中的元素数量。但由于k最大也只能是字符集的大小(假设输入字符串仅包含有限字符集),这部分的复杂度可以被认为是常数时间,因此整体时间复杂度仍然是O(N)

  • 空间复杂度O(1),尽管使用了一个HashMap来存储字符之间的映射关系,但由于输入字符串st都只包含有限的字符集(ASCII字符集),因此这个映射的大小会被限制在一个常数级别,不会随着输入字符串的长度N而增长。因此,空间复杂度可以视为O(1)

5. 补充

ASCII(American Standard Code for Information Interchange)字符集共有128个字符。这些字符包括数字、英文字母(大写和小写)、标点符号、控制字符和一些特殊字符。ASCII字符集是计算机和通信设备中最常用的字符编码之一。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 多线程并发优化实现

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Thread 使用二、Android Thread三.线程优先级 一、Thread 使用 在讲解多线程之前,我们先来讲解Thread使用几个需要注意的点&#xff1a…

Unity UGUI的DrawCall优化

Unity UGUI是一种强大的用户界面设计工具,它可以帮助开发者快速创建各种界面元素,从按钮和文本到滑块和面板等。然而,在使用UGUI时,一个常见的性能瓶颈就是DrawCall过多导致的性能下降。在本文中,我们将深入探讨UGUI的…

集成使用 GitHub Copilot 提升 IDEA 开发效率

集成使用 GitHub Copilot 提升 IDEA 开发效率 在现代软件开发中,集成开发环境(IDE)如IntelliJ IDEA已经成为开发人员不可或缺的工具。它们提供了代码编辑、调试、版本控制等一系列功能,极大地提高了开发效率。而GitHub Copilot作…

C# Winfrom实例:武汉智能安检闸机数据接收和解析

项目介绍:本实例主要是接收安检闸机的数据解析并显示到界面上,只做功能实现,不做界面美化 硬件:闸机一个、网线一根、电脑主机开发环境:vs2017 系统:win10涵盖知识点:tcp通讯、文件写入、多线程…

《软件方法(下)》8.2.5.2 属性是否直接描述类(202402更新)(2)

导致出现违反本要点的错误的原因有: (1)缺少抽象能力 缺少抽象能力的建模人员经常会把手上素材的信息,一一对应地映射为类和属性,导致本来属于多个类的信息被合并在一个类中。 如图8-63,建模人员对照着一…

ETL、ELT区别以及如何正确运用

一、 浅谈ETL、ELT ETL与ELT的概念 ETL (Extract, Transform, Load) 是一种数据集成过程,通常用于将数据从一个或多个源系统抽取出来,经过清洗、转换等处理后,加载到目标数据存储中。这种方法适用于需要对数据进行加工和整合后再加载到目标…

Django学习笔记-HTML实现MySQL的图片上传

1.django项目编写index.html代码 创建form表单,路由指向upload,请求方式post,enctype设置"multipart/form-data", post请求添加{% csrf_token %},编写两个input,上传和提交 2.添加upload路由 3.views中创建upload 1).获取上传的文件,没有上传则返回"没有指定…

打码半年,开源一款自定义大屏设计软件!

hi,大家好,我是Tduck马马。 最近我们开源了一款大屏软件-TReport,与大家分享。 TReport是一款基于Vue3技术栈的数据可视化系统,支持静态、动态api等数据源;可用于数据可视化分析、报表分析、海报设计使用。 提供自定…

Stable Diffusion 绘画入门教程(webui)-图生图

通过之前的文章相信大家对文生图已经不陌生了,那么图生图是干啥的呢? 简单理解就是根据我们给出的图片做为参考进行生成图片。 一、能干啥 这里举两个例子 1、二次元头像 真人转二次元,或者二次元转真人都行, 下图为真人转二次…

.net6 webapi log4net完整配置使用流程

前置&#xff1a;为项目安装如下两个依赖 1.创建文件夹cfgFile 2.创建log4net.Config <?xml version"1.0" encoding"utf-8" ?> <log4net><appender name"ConsoleAppender" type"log4net.Appender.ConsoleAppender"…

使用备份工具xtrabackup进行差异备份详细讲解

差异备份 基于第一天进行差异备份 删除之前修改的数据备份 [rootservice ~]# rm -rf /data/backup/* [rootservice ~]# ls /data/backup 完整备份 [rootservice ~]# xtrabackup --defaults-file/etc/my.cnf --backup --target-dir/data/backup/base/ -uroot -pWyxbuke00. -H…

Collection集合体系(ArrayList,LinekdList,HashSet,LinkedHashSet,TreeSet,Collections)

目录 一.Collection 二.List集合 三.ArrayList集合 四.LinkedList集合 五.Set集合 六.hashSet集合 七.LinkedHashSet集合 八.TreeSet集合 九.集合工具类Collections 集合体系概述 单列集合&#xff1a;Collection代表单列集合&#xff0c;每个元素&#…

大白话说说Docker容器默认网络模型工作原理

Docker的默认网络模型 —— 桥接模式&#xff08;Bridge&#xff09; 当你不做任何特殊设置时&#xff0c;Docker会使用一种叫做“桥接模式”的网络设置。这就像是给你的容器小房子安装了一个虚拟的桥接网络。这座桥连接着容器和你的电脑&#xff08;宿主机&#xff09;&#…

Jmeter之内置函数__property和__P的区别

1. __property函数 作用 读取 Jmeter 属性 语法格式 ${__property(key,var,default)} 参数讲解 小栗子 ${__property(key)} 读取 key 属性如果找不到 key 属性&#xff0c;则返回 key&#xff08;属性名&#xff09; ${__property(key,,default)} 读取 key 属性如果找不到 k…

Flink Task退出流程与Failover机制

这里写目录标题 1 TaskExecutor端Task退出逻辑2 JobMaster端failover流程2.1 Task Execute State Handle2.2 Job Failover2.2.1 Task Failure Handle2.2.2 Restart Task2.2.3 Cancel Task&#xff1a;2.2.4 Start Task 3 Task失败的自动重启策略 1 TaskExecutor端Task退出逻辑 …

算法项目(2)—— LSTM、RNN、GRU(SE注意力)、卡尔曼轨迹预测

本文包含什么? 项目运行的方式(包教会)项目代码LSTM、RNN、GRU(SE注意力)、卡尔曼四种算法进行轨迹预测.各种效果图运行有问题? csdn上后台随时售后.项目说明 本文实现了三种深度学习算法加传统算法卡尔曼滤波进行轨迹预测, 预测效果图 首先看下不同模型的指标: 模型RM…

MySQL学习Day19——索引的数据结构

一、为什么使用索引: 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;就好比一本教课书的目录部分&#xff0c;通过目录中找到对应文章的页码&#xff0c;便可快速定位到需要的文章。MySQL中也是一样的道理&#xff0c;进行数据査找时&#xff0c;首先查看查询…

相机图像质量研究(26)常见问题总结:CMOS期间对成像的影响--坏点

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

FreeRTOS学习笔记——(FreeRTOS中断管理)

这里写目录标题 一、什么是中断&#xff1f;&#xff08;了解&#xff09;二、中断优先级分组设置&#xff08;熟悉&#xff09;三、中断相关寄存器&#xff08;熟悉&#xff09;四、FreeRTOS中断管理实验&#xff08;掌握&#xff09; 一、什么是中断&#xff1f;&#xff08;…

【Azure 架构师学习笔记】- Azure Databricks (8) --UC架构简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件 前言 UC 简单来说&#xff0c;就是管理两样东西&#xff1a;用户和元存储。 用户管理 所有Databri…