【面试经典150 | 哈希表】同构字符串

news2024/11/17 22:48:32

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:哈希表
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

【哈希表】【字符串】


题目来源

面试经典150 | 205. 同构字符串


题目解读

判断两个字符串是否是同构的,所谓的同构就是有相同字符组成模式,比如两个字符串都是 ABB 模式这样。


解题思路

方法一:哈希表

我们使用两个哈希表分别记录两个字符串中字符出现的位置,如果两个字符串中相同位置的字符在哈希表中出现的位置一致,则两个字符串是同构的,否则不是同构的。

我们拿 s = "egg"t = "add" 举例。首先,统计两个字符串中字符出现位置得到 sIdx = ['e': 0, 'g' = 2]sIdx = ['a: 0, 'd' = 2];然后比较两个字符串中相同位置的字符在哈希表中出现的位置,0 = 02 = 2,因此两个字符串是同构字符串。

实现代码

class Solution {
public:
    bool isIsomorphic(string s, string t) {
        if (s.size() != t.size()) return false;

        unordered_map<char, int> sIdx, tIdx;
        int n = s.size();

        // 统计字符出现位置
        for(int i = 0; i < n; ++i) {
            sIdx[s[i]] = i;
            tIdx[t[i]] = i;
        }

        // 判断相同位置字符出现位置是否一致
        for(int i = 0; i < n; ++i) {
            int x = s[i], y = t[i];
            if(sIdx[x] != tIdx[y])
                return false;
        }
        return true;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为字符串 s 的长度。

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

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

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

相关文章

配电运维管理系统:电力数字化升级的关键

随着社会的快速发展和电力需求的增长&#xff0c;配电系统面临着越来越大的压力。为了确保电力供应的稳定性和可靠性&#xff0c;电力企业需要采用先进的管理系统&#xff0c;以提高配电运维的效率和质量。 一、配电运维管理系统的价值 配电运维管理系统通过集成了人工智能…

Nessus安装与使用_nessus安装使用教程

前言&#xff1a; Nessus号称是世界上最流行的漏洞扫描程序&#xff0c;全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上遥控&#xff0c;进行…

用jad反编译工具查看java接口相关的默认修饰符

接口抽象类复习 -> 默认修饰符是啥 -> jad反编译证明 https://www.cnblogs.com/changrunwei/p/6618117.html 文章目录 背景操作过程反编译前后对比操作截图结论 背景 今天刷到这篇文章&#xff0c;想起之前笔试题总是记不清&#xff0c;所以想证明下。 之前一直不清楚要…

d3dx9_39.dll如何修复?最新修复d3dx9_39.dll方法分享

大家好&#xff01;今天我要和大家分享的主题是“d3dx9_39.dll丢失的修复方法”。我们都知道&#xff0c;在使用电脑的过程中&#xff0c;经常会遇到各种问题&#xff0c;而其中最常见的就是文件丢失。d3dx9_39.dll就是其中一个常见的丢失文件。那么&#xff0c;如何修复这个丢…

Linux|软件安装包deb打包

参考&#xff1a; Ubuntu下的deb打包、安装与卸载 ubuntu打包软件 【Ubuntu】打包C程序及导出依赖库lib 文章目录 导出可执行程序依赖库安装打包工具创建工作目录设定安装的路径编写控制文件使用 dpkg 命令构建 deb包安装 deb包卸载deb包 导出可执行程序依赖库 在.out文件所在…

如何选择适合的Java服务器租用方案

随着共享经济的兴起&#xff0c;租车软件在如今的市场上变得越来越流行。但是&#xff0c;对于许多初创公司和开发者来说&#xff0c;了解开发一个租车软件所需的费用以及如何选择适合的Java服务器租用方案可能是一个挑战。本文将为您提供一些建议&#xff0c;以帮助您了解开发…

攻防世界题目练习——Web引导模式(一)

题目目录 1. command_execution2.xff_referer3.simple_js4.php_rce5.Web_php_include6.upload17. warmup 难度1全部写过了&#xff0c;这个系列里没有 指路&#xff1a; 攻防世界题目练习——Web难度1&#xff08;一&#xff09; 攻防世界题目练习——Web难度1&#xff08;二&a…

软件工程概论

文章目录 软件的定义软件的特点软件的种类软件工程的起源软件工程的三个阶段软件工程概念的提出软件开发的本质软件工程框架软件工程的目标软件工程的原则软件工程的活动 软件的定义 计算机系统中的程序及其文档。 程序是计算任务的处理对象和处理规则的描述&#xff1b; 文档…

Unity 引擎变身收费大亨,程序员们的钱包开始减肥计划

变天了&#xff01;Unity 引擎自 2024 年元旦起&#xff0c;要开始对我们开发者“开刀”了。别急&#xff0c;先听我慢慢道来这个悲欢离合的故事。 Unity 收费新政&#xff1a;别再白嫖了&#xff01; 喜大普奔&#xff01;Unity 引擎宣布从 2024 年 1 月 1 日开始&#xff0…

基于若依ruoyi-nbcio支持flowable流程分类里增加流程应用类型

主要考虑到流程分很多种&#xff0c;普通的是OA流程&#xff0c;还有自定义业务流程&#xff0c;钉钉流程等&#xff0c;所以这里加了一个appType的应用类型&#xff0c;以便后续对不同的应用流程做不同的处理。 1、首先增加一个字典wf_app_type的流程应用类型如下 2、先增加三…

【排序算法】插入排序

文章目录 一&#xff1a;基本概念1.1 介绍1.2 原理1.3 插入排序法思想 二&#xff1a;代码实现2.1 源码2.2 执行结果2.3 测试八万条数据 三&#xff1a;算法分析3.1 时间复杂度3.2 空间复杂度3.3 稳定性 一&#xff1a;基本概念 1.1 介绍 插入式排序属于内部排序法&#xff0…

计算机视觉简介(1)

任何计算机视觉处理流程都始于成像系统&#xff0c;它从景物中捕获反射出来的光线&#xff0c;并将光信号转换成计算机可以读取和处理的图像格式 在计算机成像技术发展的早期&#xff0c;图像通过把胶卷或印刷图像素 化后获得&#xff1b;而现在图 像通常直接由数码相机获取&a…

内网穿透的应用-本地部署Stackedit Markdown编辑器公网远程访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器&#xff0c;在GitHub上拥有20.7k Star&#xff01;&#xff0c;它支持将Markdown笔记保…

四川天蝶电子商务有限公司怎么样?

近年来&#xff0c;随着抖音的迅猛发展&#xff0c;越来越多的企业开始涉足抖音服务领域&#xff0c;希望通过抖音平台来拓展自己的业务。这其中&#xff0c;四川天蝶电子商务有限公司便是备受瞩目的一家。那么&#xff0c;四川天蝶电子商务有限公司的抖音服务到底如何呢&#…

主从复制的实现方案

读写分离技术架构图 实现读写分离的技术架构选型如上;需要自己去实践主从复制;为了节省资源&#xff0c;当然系统并发量并没有那么大,选择一主一丛;强制读主库,为了解决主从同步延迟带来的影响&#xff1b;对于实时性要求高的强制读主库&#xff1b;GTID 主要是一种事务标识技术…

什么是网络安全?掌握网络安全技能可以做什么

前言 随着互联网时代的到来&#xff0c;越来越多的人依靠互联网工作和生活&#xff0c;网络安全变得越来越重要。市场对网络安全工程师职位的需求逐渐增加。越来越多的朋友希望发展网络安全技能。那么网络安全是什么&#xff1f;如何学习网络安全&#xff1f;学完网络安全可以…

物联网AI MicroPython传感器学习 之 4路电容式触摸开关

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 板载TTP224电容式4键触摸感应IC&#xff0c;开发者通过触摸该电容模块获取对应的高低电平状态&#xff0c;可以广泛应用于灯光控制、玩具、家用电器等产品中。 引脚定义&#xff1a; VCC&…

Java学习笔记(一)

目录 一、Java概述 &#xff08;一&#xff09;Java技术体系平台 &#xff08;二&#xff09;Java重要特点 &#xff08;三&#xff09;Java运行机制及运行过程 &#xff08;四&#xff09;JDK &#xff08;五&#xff09;JRE 二、Java的快速入门 &#xff08;一&#…

岩土工程安全监测无线振弦采集仪在无线组网的关键要点

岩土工程安全监测无线振弦采集仪在无线组网的关键要点 岩土工程是一种奇特而又极其重要的工程。它涉及到土地、岩石、气候等等因素&#xff0c;需要重视安全因素。而无线振弦采集仪作为一种常用的监测设备&#xff0c;可以采集岩土工程中的振动数据&#xff0c;从而确保工程的…

Go代码包与引入:如何有效组织您的项目

目录 一、引言二、代码包概述基础定义常用标准库包 三、创建代码包文件结构命名规则公共与私有标识符举例 五、包引入基础包引入批量引入别名Dot Import匿名引入初始化顺序完整的引入声明语句形式 六、包的组织和管理使用 go mod 管理模块模块依赖本地替换和代理设置包的版本控…