( 字符串) 205. 同构字符串 ——【Leetcode每日一题】
❓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<=5∗104
- t.length == s.length
s
和t
由任意有效的 ASCII 字符组成
💡思路:
法一:定长数组
由于 s
和 t
由任意有效的 ASCII 字符组成,ASCII 对应的十进制为 0 ~ 255
,所以可以定义两个长度为256
的数组,就能包括所有字符:
- 数组中记录一个字符上一次出现在字符串中的位置;
- 如果两个字符串中的字符上一次出现的位置一样,那么就属于同构。
法二:哈希表
由于不同字符不能映射到同一个字符上,所以两个字符串的映射关系都必须一一对应,不能出现一对多的情况,这里设置两个哈希表,分别存储两个字符串中已建立映射关系的字符:
- 同时遍历字符串
s
和字符串t
的相同位置,建立映射关系; - 如果
s
的字符已经在哈希表中,则判断t
对应位置的字符是否等于哈希表中的映射,如果不等,则返回false
,相等则继续遍历。 - 如果字符串
s
和t
的字符都不在哈希表中,则将s
和t
对应位置的映射关系存储到哈希表中; - 否则不是同构字符串,返回
false
。 - 最后返回
true
。
🍁代码:(Java、C++)
法一:定长数组
Java
class Solution {public boolean isIsomorphic(String s, String t) {int[] preIndexOfS = new int[256];int[] preIndexOfT = new int[256];for(int i = 0; i < s.length(); i++){char sc = s.charAt(i), tc = t.charAt(i);if(preIndexOfS[sc] != preIndexOfT[tc]){return false;} preIndexOfS[sc] = i + 1;preIndexOfT[tc] = i + 1;}return true;}
}
C++
class Solution {
public:bool isIsomorphic(string s, string t) {vector<int> preIndexOfS(256);vector<int> preIndexOfT(256);for (int i = 0; i < s.size(); i++) {if (preIndexOfS[s[i]] != preIndexOfT[t[i]]) {return false;}preIndexOfS[s[i]] = i + 1;preIndexOfT[t[i]] = i + 1;}return true;}
};
法二:哈希表
Java
class Solution {public boolean isIsomorphic(String s, String t) {Map<Character, Character> mapping = new HashMap<>();Set<Character> setting = new HashSet<>();for(int i = 0; i < s.length(); i++){char sc = s.charAt(i), tc = t.charAt(i);if(mapping.containsKey(sc)){if(mapping.get(sc) != tc) return false;}else if(!setting.contains(tc)){mapping.put(sc, tc);setting.add(tc);}else{return false;}}return true;}
}
C++
class Solution {
public:bool isIsomorphic(string s, string t) {unordered_map<char, char> mapping;unordered_set<char> setting;for(size_t i = 0; i < s.size(); i++){if(mapping.find(s[i]) != mapping.end()){if(mapping[s[i]] != t[i]) return false;}else if(setting.find(t[i]) == setting.end()){mapping.insert({s[i], t[i]});setting.insert(t[i]);}else{return false;}}return true;}
};
🚀 运行结果:
🕔 复杂度分析:
- 时间复杂度: O ( n ) O(n) O(n),其中
n
为字符串s
的长度。 - 空间复杂度: O ( S ) O(S) O(S),其中
S
为字符集大小。法一:我们使用了一个长度为256
的数组,存储每个字符出现的次数。法二:哈希表存储字符的空间取决于字符串的字符集大小,最坏情况下每个字符均不相同。
题目来源:力扣。
放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!
注: 如有不足,欢迎指正!
相关文章:
( 字符串) 205. 同构字符串 ——【Leetcode每日一题】
❓205. 同构字符串 难度:简单 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同…...
python+django+vue消防知识宣传网站
开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 层随着移动应用技术的发展,越来越多的消防单位借助于移动手机、电脑完成生活中的事…...
彻底告别手动配置任务,魔改xxl-job!
分析 改造 1、接口调用 2、创建新注解 3、自动注册核心 4、自动装配 测试 测试后 XXL-Job是一款非常优秀的任务调度中间件,其轻量级、使用简单、支持分布式等优点,被广泛应用在我们的项目中,解决了不少定时任务的调度问题。不仅如此&a…...
【五一创作】Springboot+多环境+多数据源(MySQL+Phoenix)配置及查询(多知识点)
文章目录 1. 背景2. 技术点3 子模块依赖SpringBoot设置4. 多环境配置4.1 application.yml4.2 application-pro.yml 5. 多数据源配置5.1 yml配置5.2 自定义数据源在Java中配置5.2.1 PhoenixDataSourceConfig5.2.2 MysqlDataSourceConfig 6. 完整的Pom6. 测试6.1 Mapper配置6.2 方…...
Python小姿势 - 线程和进程:
线程和进程: Python里面线程是真正的并行执行,进程是可以并行执行的。 所谓进程,就是操作系统中执行一个程序的独立单元,它是系统进行资源分配和调度的基本单位。一个进程可以创建和撤销另一个进程,同一个进程内可以并…...
Mysql 锁
目录 0 课程视频 1 概述 1.1 多用户 并发访问 -> 为了数据一致性(多用户) 1.2 全局锁 数据库所有表 1.3 表级锁 每次操作 锁整张表 1.4 行级锁 每次操作 锁对应行 2 全局锁 ->锁后只读 -> 全库逻辑备份 2.1 阻塞DML /DDL 可DQL读 2.2 语法 2.2.1 加锁 flush…...
基于ssm的论坛系统的设计与实现【附源码】
基于ssm的论坛系统的设计与实现 摘 要 早期的网络论坛系统已经诞生一段时间,随着互联网技术的发展,它已经从最初的简单电子公告板系统变成了一种丰富的论坛系统社区模型。人们通过论坛系统进行信息的获取、发布和交流已经成为一种普遍的社交方式&#x…...
Vue中的事件修饰符
Vue中的事件修饰符: 1.prevent: 阻止默认事件 (常用) : 2.stop: 阻止事件冒泡 (常用) : 3.once: 事件只触发一次(常用) : 4.capture:使用事件的捕获模式: 5.self: 只有event.target是当前操作的元素是才触发事件; 6.passive:事件的默认行为立即执行,无需等待事件回调…...
如何保证Redis和数据库的一致性
关注我,升职加薪就是你! 当我们对数据进行修改的时候,到底是先删缓存,还是先写数据库? 1、如果先删缓存,再写数据库:在高并发场景下,当第一个线程删除了缓存,还没来得及写…...
Ubantu docker学习笔记(八)私有仓库
文章目录 一、建立HTTPS链接1.在仓库服务器上获取TLS证书1.1 生成证书颁发机构证书1.2 生成服务器证书1.3 利用证书运行仓库容器 2.让私有仓库支持HTTPS3.客户端端配置 二、基本身份验证三、对外隐藏仓库服务器3.1 在服务器端3.2 在客户端进行 四、仓库可视化 在前面的学习中&a…...
【五一创作】网络协议与攻击模拟-01-wireshark使用-捕获过滤器
协议 TCP/IP协议簇 网络接口层(没有特定的协议)PPPOE 物理层 数据链路层 网络层:IP (v4/v6) ARP (地址解析协议) RARP ICMP (Internet控制报文协议) IGMP 传输层:TCP(传输控制协议) UDP(用户数据报协议) 应用层:都是基于传输层协议的端口,总共端口0~65535 0~1023 HTTP—t…...
网络-IP地址(嵌入式学习)
IP地址 基本概念IPv4 五类:A B C D E特殊地址子网掩码子网号概念IPv6优势举个栗子 基本概念 IP地址是Internet中主机的标识 IP地址(Internet Protocol Address 互联网国际地址)是一种在Internet上的给主机编址的方式,它主要是为…...
一文介绍Linux EAS
能量感知调度(Energy Aware Scheduling,简称EAS)是目前Android手机中Linux线程调度器的基础功能,它使调度器能预测其决策对CPU能耗的影响。依靠CPU的能量模型(Energy Model,简称EM),…...
【五一创作】【Midjourney】Midjourney 连续性人物创作 ① ( 通过垫图方式生成类似图像 )
文章目录 一、Midjourney 生成图像二、通过垫图方式生成类似图像 一、Midjourney 生成图像 Midjourney 可以生成高质量的图像 , 但是 生成过程有很大的随机性 , 输入同样的提示词指令 , 其输出结果也存在很大的不同 ; 如果要 生成稳定的人物角色 , 场景 , 描述连贯的内容 , 这…...
牛客刷题错题记录【03】
链接:https://www.nowcoder.com/questionTerminal/8242fbf4b3a241219989b3e1d0ee82db 来源:牛客网 下列关于Vue和React的描述错误的是( Vue进行数据拦截/代理,对数据更敏感,数据驱动视图自更新,而React需…...
maven-gpg-plugin gpg禁用交互式输入密码 免密码输入 设置默认密码 关闭pinentry-qt输入 passphrase
一、问题描述 在使用maven-gpg-plugin打包jar时,默认情况下,每次都会弹出对话框要你输入密码: 这就有点烦,有啥办法可以设置默认方法没?网上找了一圈,通过搜索关键词“passphrase”,找到了一些教程&#x…...
急需国产化替代的重要的工程软件有哪些?
急需国产化替代的重要的工程软件有哪些? 软件一:AutoCAD等领域常用设计软件 AutoCAD由Autodesk公司开发的工程辅助设计软件,目前是设计领域 最重要的工程软件。在高端3D的CAD领域,国产软件几乎全军覆没,在中 低端还有…...
计算机组成原理 4.2.1存储芯片连接
连接原理 主存储器 通过数据总线、地址总线和控制总线和CPU相连数据总线的位数正比于数据传输率地址总线的位数决定可寻址的最大地址空间控制总线(读/写)指出总线周期的类型和本次输入/输出完成的时刻 但是实际中存储芯片往往很小难以满足地址和数据的位数需求,此…...
这份【互联网项目全流程表】,实在是泰裤辣!!!
互联网行业是一个快速变化的行业,作为半个互联网人。太明白用户和环境每天都在不停地变化是什么感受了。 从项目开始到项目结束,要经历立项、计划、执行、结项,项目一周一个,一周一个。(**的)为了省时间…...
JAVA医院管理云HIS统计报表子系统、系统管理字系统功能实现
一、统计报表子系统 统计报表子系统功能模块:包括门诊收入汇总、住院收入汇总、收费统计报表、收费明细报表、 缴款日报、门诊收费汇总、住院科室日志、住院结算汇总、医疗项目统计、检查项目统计、 检验项目统计、月末收支汇总、药品进销存统计。 (1…...
5.Java中抽象类和接口
抽象类与接口 相同不同先从抽象类说起再从接口说起 相同 1.两者都不能实例化,因为他们都不全。(例如可以实例化一个苹果,但是不能实例化水果) 2.一个类可以实现多个接口,但是只能继承一个抽象类 3.如果这个类实现了接…...
中国平安将在2023年出现转机,复苏才刚刚开始
来源:猛兽财经 作者:猛兽财经 在解封后股价出现短暂反弹之后,由于市场担忧中国平安(02318)人寿保险部门新业务NBV(用于衡量寿险公司新业务价值的一个重要指标,当一家保险公司的NBV指标越高,那么说明每新增…...
CUDA编程(六):代码分析与调试
CUDA编程(六):代码分析与调试 代码分析与调试方法使用printf打印变量信息使用CUDA的错误检查功能使用CUDA-GDB进行调试使用Nsight进行调试使用nvprof / nvvp工具 参考文献 代码分析与调试方法 CUDA代码的运行时可能会遇到内存溢出、内存非法…...
身份鉴别解读与技术实现分析(1)
6.1.4.1 身份鉴别 本项要求包括: a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; b) 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施 在等级保护体系中,级别越高…...
为什么说7.38万的比亚迪海鸥比仰望更重要
出品 | 何玺 排版 | 叶媛 售价7.38万元起步、速度却能上130迈。注意看,这就是A0级轿车中的“新皇”—比亚迪海鸥。 出乎车圈事前的意料,海鸥这款A0级车型,在上海车展里获得的人气和追捧并不逊色于百万豪车仰望。 01 比亚迪海鸥࿰…...
【LLM】低成本部署大语言模型, 并且还能达到部署在GPU上差不多的效果
目录 前言 部署 效果 问题1:人类为什么需要睡觉? 问题2:世界上最高的山峰是什么? 前言 点进来看本文的应该都知道模型对硬件的要求很高, 那我也不废话了, 直接安排最近发现的一个开源项目, 它可以帮助我们降低部署模型的成…...
Doris(25):Doris的函数—Bitmap函数
1 BITMAP_AND(BITMAP lhs, BITMAP rhs) 计算两个输入bitmap的交集,返回新的bitmap. select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(2))) cnt; select bitmap_count(bitmap_and(to_bitmap(1), to_bitmap(1))) cnt; 2 BITMAP_CONTAINS(BITMAP bitmap, BIGINT input…...
简单分享微信小程序上的招聘链接怎么做
招聘小程序的主要用户就是企业招聘端和找工作人员的用户端,下面从这两个端来对招聘小程序开发的功能进行介绍。 企业端功能 1、岗位发布:企业根据自身岗位需求,在招聘app上发布招聘岗位及所需技能。 2.简历筛选:根据求职者提交的简历选择合适的简历,并对公开发布的简历进行筛…...
【英语】大学英语CET考试,翻译部分(修饰后置,定语从句,插入语,多动句,无主句)
文章目录 3大知识点与出题形式1、修饰后置(使用介词)2、修饰后置(定语从句(被逼无奈)/which(非限制性,加高级))3、修饰后置(插入语或同位语(只有1…...
设计模式——代理模式
导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 1、代理模式的基本介绍 2、静态代理 3、JDK动态代理 4、Cglib 代理 5、代理模式 的变体(应用场景) 1、…...
广东住房和城乡建设局网站首页/免费网站建设模板
PHP是公认的编程语言,相对容易学习。一般来说,你可以开发一个简单的网站在约半个月的研究中,可以使用PHP网站二次开发的四到五天。如果你想学习一种技能,你必须先知道什么是,什么是有用的。特别是对于那些零基础,想学或转行成为一个PHP程序员,他们应该大致了解PHP,因为学习编程…...
南通网站建设知识/临沂森佳木业有限公司
重装MAC系统后,要恢复.ssh等文件夹内容,而其在“Finder”中又是默认隐藏的,这时我们可以先在“Finder”中使用“前往文件夹功能…”进入指定文件夹,然后再进入“Time Machine”进行恢复即可。 转载于:https://www.cnblogs.com/eri…...
商品列表html模板/珠海seo关键词排名
UDP时间更新服务程序 http://qzher.com/?p647 网络编程,最好采用两台电脑, 或者一台电脑,再开个虚拟机,虚拟机采用网络桥接模式 特点: 发消息方一直向指定IP发送报时消息 收方一上线就能得到发来的即时消息 (未上线的消息全被抛弃) 若收方上线期间, 发消息方关闭, 收方也一直…...
专业建设方案/seo网站诊断分析报告
switch case的进化历程🚐简介区别总结因为长情是古董,所以假货特别多 觉得太长可以直接看总结就可以了 简介 Switch case语句在Java中是一种流程控制结构,用于将一个值与一系列可能的情况进行比较,并根据匹配的情况执行相应的代…...
电脑外设网站建设论文/新冠疫情最新情况最新消息
Mybatis的功能架构三层: API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果…...
深圳做微信网站设计/河南平价的seo整站优化定制
大家好,最近不少小伙伴在学 Python,想找个好玩的练手项目。那今天分享一个简单、好玩,适合新手的 Python 小项目。文章较长,建议收藏、喜欢关注、点赞,文末提供技术交流群。 以下是具体项目: 本文将以哔哩…...