【LeetCode每日一题】——205.同构字符串

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 哈希表

二【题目难度】

  • 简单

三【题目编号】

  • 205.同构字符串

四【题目描述】

  • 给定两个字符串 s 和 t ,判断它们是否是同构的。
  • 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
  • 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

五【题目示例】

  • 示例 1:

    • 输入:s = “egg”, t = “add”
    • 输出:true
  • 示例 2:

    • 输入:s = “foo”, t = “bar”
    • 输出:false
  • 示例 3:

    • 输入:s = “paper”, t = “title”
    • 输出:true

六【题目提示】

  • 1 < = s . l e n g t h < = 5 ∗ 1 0 4 1 <= s.length <= 5 * 10^4 1<=s.length<=5104
  • t . l e n g t h = = s . l e n g t h t.length == s.length t.length==s.length
  • s 和 t 由任意有效的 A S C I I 字符组成 s 和 t 由任意有效的 ASCII 字符组成 st由任意有效的ASCII字符组成

七【解题思路】

  • 利用哈希表的思想,我们应该保证:
    • 对于相同的字母,应该映射到同一个字母
    • 对于不同的字母,不能映射到同一个字母
  • 所以我们分别建立两个哈希表来完成上面的要求
  • 第一个哈希表来判断相同的字母是否映射到同一个字母,直接比较就可以,如果相同的字母不能映射到同一个字母,那么就返回false
  • 第二个哈希表来判断不同的字母是否映射到同一个字母,直接比较就可以,如果不同的字母可以映射到同一个字母,那么就返回false
  • 如果在循环中通过以上判断都没有返回false,那么说明两个字符串就是同构字符串,返回true即可

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n) n n n为传入的字符串的长度,传入的两个字符串长度相等
  • 空间复杂度: O ( ∣ Σ ∣ ) O(|Σ|) O(∣Σ∣) Σ Σ Σ为传入的字符串的字符集的大小

九【代码实现】

  1. Java语言版
class Solution {public boolean isIsomorphic(String s, String t) {int lenS = s.length();int lenT = t.length();if(lenS != lenT){return false;}HashMap<Character, Character> map = new HashMap<>();for(int i = 0;i < lenS;i++){if(map.containsKey(s.charAt(i))){if(map.get(s.charAt(i)) != t.charAt(i)){return false;}}else{if(map.containsValue(t.charAt(i))){return false;}map.put(s.charAt(i), t.charAt(i));}}return true;}
}
  1. C语言版
struct HashTable
{char key;char val;UT_hash_handle hh;
};bool isIsomorphic(char * s, char * t)
{struct HashTable* mapS = NULL;struct HashTable* mapT = NULL;int lenS = strlen(s);int lenT = strlen(t);if(lenS != lenT){return false;}for(int i = 0;i < lenS;i++){char tempS = s[i];char tempT = t[i];struct HashTable* valS;struct HashTable* valT;HASH_FIND(hh, mapS, &tempS, sizeof(char), valT);HASH_FIND(hh, mapT, &tempT, sizeof(char), valS);if(valT != NULL){if(valT->val != tempT){return false;}}else{valT = malloc(sizeof(struct HashTable));valT->key = tempS;valT->val = tempT;HASH_ADD(hh, mapS, key, sizeof(char), valT);}if(valS != NULL){if(valS->val != tempS){return false;}}else{valS = malloc(sizeof(struct HashTable));valS->key = tempT;valS->val = tempS;HASH_ADD(hh, mapT, key, sizeof(char), valS);}}return true;
}
  1. Python语言版
class Solution:def isIsomorphic(self, s: str, t: str) -> bool:lenS = len(s)lenT = len(t)if lenS != lenT:return FalsemapS = {}mapT = {}for tempS, tempT in zip(s, t):if (tempS in mapS and mapS[tempS] != tempT) or (tempT in mapT and mapT[tempT] != tempS):return FalsemapS[tempS] = tempTmapT[tempT] = tempSreturn True
  1. C++语言版
class Solution {
public:bool isIsomorphic(string s, string t) {int lenS = s.size();int lenT = t.size();if(lenS != lenT){return false;}unordered_map<char, char> mapS;unordered_map<char, char> mapT;for(int i = 0;i < lenS;i++){char tempS = s[i];char tempT = t[i];if((mapS.count(tempS) && mapS[tempS] != tempT) || (mapT.count(tempT) && mapT[tempT] != tempS)){return false;}mapS[tempS] = tempT;mapT[tempT] = tempS;}return true;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

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

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

相关文章

资深媒体人宋繁银加入《数据猿》任总编辑,全面负责公司整体内容工作

大数据产业创新服务媒体 ——聚焦数据 改变商业 2023年7月北京&#xff0c;《数据猿》宣布正式任命宋繁银为总编辑&#xff0c;全面负责公司整体内容工作。此次重要的人事任命标志着《数据猿》的发展迈上了一个新的台阶&#xff0c;对于《数据猿》团队而言&#xff0c;不仅是一…

redis的事务和watch机制

这里写目录标题 第一章、redis事务和watch机制1.1&#xff09;redis事务&#xff0c;事务的三大命令语法&#xff1a;开启事务 multi语法&#xff1a;执行事务 exec语法&#xff1a;取消事务 discard 1.2&#xff09;redis事务的错误和回滚的情况1.3&#xff09;watch机制语法&…

VS Code安装使用教程

目录 1. VS Code是什么&#xff1f; 2. VS Code的下载和安装 下载&#xff1a; 安装&#xff1a; 2.2 环境的介绍 3. VS Code配置C/C开发环境 3.1 下载和配置MinGW-w64编译器套件 下载&#xff1a; 配置&#xff1a; 3.2 安装C/C插件 3.3 重启VSCode 4. 在VSCode上编…

06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)

文章目录 1. 主要的窗体类及其用途2. 窗体类重要特性的设置2.1 setAttribute()函数2.2 setWindowFlags()函数2.3 setWindowState()函数2.4 setWindowModality()函数2.5 setWindowOpacity()函数 3. 多窗口应用程序设计3.1 主窗口设计3.2 QFormDoc类的设计3.3 QFormDoc类的使用3.…

linux自定义网络访问规则

1.更改防火墙默认区域为trusted firewall-cmd --set-default-zonetrusted 2.新建一个zone&#xff0c;将想要访问本机80端口的ip&#xff0c;如&#xff1a;192.168.3.99 &#xff0c;添加的这个zone中&#xff0c;同时在这个zone中放行80端口。 firewall-cmd --permanent --ne…

node配置Web 服务器

1、什么是 Web 服务器 Web服务器一般指网站服务器&#xff0c;是指驻留于因特网上某种类型计算机的程序&#xff0c;Web服务器的基本功能就是提供Web信息浏览服务。 它只需支持HTTP协议、HTML文档格式及URL&#xff0c;与客户端的网络浏览器配合。 大多数 web 服务器都支持服…

Javascript 正则

基本语法 定义 JavaScript种正则表达式有两种定义方式 构造函数 var regnew RegExp(<%[^%>]%>,g);字面量 var reg/<%[^%>]%>/g;g&#xff1a; global&#xff0c;全文搜索&#xff0c;默认搜索到第一个结果接停止i&#xff1a;ingore case&#xff0c;忽略…

接口自动化测试框架及接口测试自动化主要知识点

接口自动化测试框架&#xff1a; 接口测试框架&#xff1a;使用最流行的Requests进行接口测试接口请求构造&#xff1a;常见的GET/POST/PUT/HEAD等HTTP请求构造 接口测试断言&#xff1a;状态码、返回内容等断言JSON/XML请求&#xff1a;发送json\xml请求JSON/XML响应断言&…

绝了!工业配电柜看这篇就够了!

随着工业自动化的不断发展&#xff0c;电力作为生产的重要支撑&#xff0c;其稳定性、安全性和高效性变得尤为重要。 配电柜作为电力系统的核心组成部分&#xff0c;其监控不仅关乎生产的连续性&#xff0c;也涉及员工和设备的安全。通过实时监测、数据采集和分析&#xff0c;工…

Linux 上安装部署Nacos

标题&#xff1a;在Linux上安装和部署Nacos Nacos是一个开源的分布式服务发现和配置管理平台&#xff0c;它可以帮助开发人员实现微服务架构中的服务注册、发现和动态配置管理。 步骤1&#xff1a;准备工作 在开始安装Nacos之前&#xff0c;确保您已经具备以下条件&#xff1…

Mongoose http server 例子

今天抽了点时间看了一下 mongoose的源码&#xff0c; github 地址&#xff0c;发现跟以前公司内部使用的不太一样&#xff0c;这里正好利用其 http server 例子来看一下。以前的 http message 结构体是这样的&#xff1a; /* HTTP message */ struct http_message {struct mg_…

css的transform样式计算-第一节

本文作者为 360 奇舞团前端开发工程师 引言 在使用 css 样式进行样式的缩放、旋转等设置时&#xff0c;思考了一下它的较浅层的原理&#xff0c;恩&#xff0c;这个阶段都 是一些初高的数学计算&#xff0c;从新看这里的时候顺便捡了捡初高中的数学&#xff0c;比如三角函数之类…

CSS:盒子模型 与 多种横向布局方法

目录 盒子模型块级盒子内联级盒子内联块级盒子弹性盒子display 改变模型区域划分text 内容区padding 填充区border 边框区margin 外边距直接设置盒子大小 布局横向布局方法一 float 浮起来方法二 内联块级元素实现方法三 弹性盒子模型 盒子模型 块级盒子 独占一行&#xff0c…

React中使用mobx管理状态数据使用样例

MobX 是一个身经百战的库&#xff0c;它通过运用透明的函数式响应编程&#xff08;Transparent Functional Reactive Programming&#xff0c;TFRP&#xff09;使状态管理变得简单和可扩展。官网地址&#xff1a;关于 MobX | MobX中文文档 | MobX中文网 安装依赖 mobx-react-…

QT的信号槽的四种写法和五种链接方式

目录 四种信号槽写法&#xff1a; 五种连接方式&#xff1a; 实例&#xff1a; 常见错误及改正&#xff1a; 错误1: 未连接信号与槽 错误2: 信号和槽参数不匹配 错误3: 未使用Q_OBJECT宏 错误4: 跨线程连接未处理 在Qt中&#xff0c;信号&#xff08;Signal&#xff09…

openEuler-OECA考试报名火热开启,尊享半价优惠 作者:HopeInfra 发布时间:2023-08-10

近日&#xff0c;润和软件人才评定报名系统已成功上线运行&#xff0c;现openEuler-OECA人才评定考试报名优惠活动火热开启&#xff0c;欢迎大家报名咨询&#xff01; 关于openEuler人才评定 随着openEuler及其发行版本在各个行业使用量逐年增多&#xff0c;相关人才的评定诉求…

突破笔试:力扣129. 求根节点到叶节点数字之和

1. 题目链接&#xff1a;129. 求根节点到叶节点数字之和 给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。每条从根节点到叶节点的路径都代表一个数字&#xff1a;例如&#xff0c;从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 …

http相关知识点

文章目录 长链接http周边会话保持方案1方案2 基本工具postmanFiddlerFiddler的原理 长链接 一张网页实际上可能会有多种元素组成&#xff0c;这也就说明了网页需要多次的http请求。可由于http是基于TCP的&#xff0c;而TCP创建链接是有代价的&#xff0c;因此频繁的创建链接会…

大数据Flink(五十六):Standalone伪分布环境(开发测试)

文章目录 Standalone伪分布环境(开发测试) 一、架构图 二、环境准备 三、下载安装包</

微信小程序 map地图(轨迹)

allMarkers效果图 废话少说直接上马&#xff08;最后是我遇到的问题&#xff09; cover-view是气泡弹窗&#xff0c;可以自定义弹窗&#xff0c;要配合js&#xff1a;customCallout&#xff0c;如果是非自定义的话&#xff1a;callout&#xff08;可以修改颜色、边框宽度、圆角…