LeetCode 205 同构字符串

news2025/1/11 15:05:06

题目

给定两个字符串 s 和 t ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例 1:

输入:s = "egg", t = "add"
输出:true

示例 2:

输入:s = "foo", t = "bar"
输出:false

示例 3:

输入:s = "paper", t = "title"
输出:true

提示:

  • 1 <= s.length <= 5 * 104
  • t.length == s.length
  • s 和 t 由任意有效的 ASCII 字符组成

题目解析

同构字符串意思就是字符串1中的每个字符都唯一映射字符串b中的一个字符

比如 a---->d,c----->e,这个对应关系是双向的,即1中字符a--->d,那么2中字符d也一定是对应的a

不能有这种场景如a--->d;c----->d;

思路

可以使用一个map来存储对应关系,键为字符串1的当前字符,值为字符串2的当前字符

如果遇到map中已经有了该key,那么就需要取出来value,判断value是否与字符串2的当前值一样,一样说明是对应的,不一样说明不对应,直接返回false

例如 abb ,cdf ,

但是这种情况忽略了一种情况

badc,babe,因为b已经对应了b,那么d就不能再对应b

代码

class Solution {
    public boolean isIsomorphic(String s, String t) {
        int a = s.length();
        int b=t.length();
        //长度不等,直接返回false
        if(a!=b){
            return false;
        }
        //定义两个map存储对应关系
        HashMap<Character,Character> map = new HashMap<>();
        HashMap<Character,Character> map1 = new HashMap<>();
        for(int i=0;i<a;i++){
            char c = s.charAt(i);
            char d = t.charAt(i);
            //如果map已经存在了key c,那么要取出值然后判断对应值是否与d相等
            if(map.containsKey(c)){
                char e = map.get(c);
//不相等说明映射错误
               if(d!=e){
                return false;
               }
              //判断map1中已经存在了d,取出值f与c对比,看是否相等
            }else if(map1.containsKey(d)){
                char f = map1.get(d);
//不相等说明有误
                if(f!=c){
                return false;
               }
            }else{
//map中都不包括该key,存入map
                map.put(c,d);
                map1.put(d,c);
            }
        }
        return true;

    }
}

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

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

相关文章

边缘智能:让每一个温室都成为计算中心

&#xff08; 于景鑫 国家农业信息化工程技术研究中心&#xff09;当人工智能的浪潮席卷全球&#xff0c;大语言模型&#xff08;LLM&#xff09;引领智能风潮之时&#xff0c;"智慧农业"也摩拳擦掌跃跃欲试。设施农业作为现代农业的翘楚&#xff0c;正站在数智化变革…

C语言典型例题38

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题3.5 写程序&#xff0c;判断某一年是否为闰年 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //例题3.5 写程序&#xff0c;判断某一年是否为闰年//相关知识&#xff1a;如果…

观存储历史,论数据未来

数据存储 这几天我反复观看了腾讯云社区的《中国数据库前世今生》纪录片&#xff0c;每次的感受都大相径庭。以下是我在这段时间里对纪录片的两个不同感想&#xff0c;希望感兴趣的小伙伴们也能去观看一番。 一个是关于国产数据库的发展趋势的探讨&#xff1a;https://blog.c…

使用 C# 反射查询程序集的元数据 (LINQ)

文章目录 1. 反射概述2. LINQ 概述3. 使用反射和 LINQ 查询程序集的元数据4. 扩展&#xff1a;查询字段和属性5. 扩展示例&#xff1a;查询公共类及其属性和方法6. 总结 在 C# 中&#xff0c;反射是一个强大的工具&#xff0c;它允许我们在运行时检查程序集、类型、方法等的元数…

机器学习速成第二集——监督学习之回归(理论部分)!

目录 回归算法 线性回归与非线性回归在实际应用中的优缺点比较是什么&#xff1f; 线性回归的优缺点 非线性回归的优缺点 优点&#xff1a; 缺点&#xff1a; 多项式回归模型如何选择最佳的多项数以提高预测准确性&#xff1f; 岭回归和套索回归在防止过拟合方面的具体…

【屏驱MCU】实现文件路径的的挂载

说明&#xff1a;本文涉及到一些底层的 .py 编译脚本以及编辑原理&#xff0c;笔者也不是完全明白&#xff0c;本文的主要目的是介绍一下流程&#xff0c;供小白使用。 接上文&#xff1a;【屏驱MCU】RT-Thread 文件系统接口解析 屏驱MCU系列文章 【屏显MCU】多媒体接口总结&am…

【Python学习-UI界面】PyQt5 小部件6- QComboBox

样式如下: 一个 QComboBox 对象呈现一个下拉列表供选择。它在表单上占用的屏幕空间最小&#xff0c;仅显示当前选定项。 可以将组合框设置为可编辑&#xff1b;还可以存储像素映射对象。 常用方法如下&#xff1a; 序号方法描述1addItem将字符串添加到集合中2addItems在列…

第十一章、 Java常用类

第十一章、 Java常用类 11.1 包装类 11.1.1 包装类的分类 针对八种基本数据类型相应的引用类型-包装类有了类的特点&#xff0c;就可以调用类中的方法。 11.1.2 包装类和基本数据的转换 Jdk5前的手动装箱和拆箱方式&#xff0c;装箱&#xff1a;基本类型->包装类型&am…

Mysql——对数据基本操作(增删查改)——操纵语言(DML)

之前的创建数据库和创建表&#xff0c;类型、约束都是用的DDL【data definition language】 数据定义语言&#xff0c;用来维护存储数据的结构 代表指令: create, drop, alter 那么现在我们来学习数据操纵语言 DML【data manipulation language】 数据操纵语言&#xff0c;用来…

现网/生产/一线问题记录

为信息安全考虑&#xff0c;涉及到公司保密信息的&#xff0c;用某来代替 文章目录 问题现象定位过程查看节点日志分析重启原因发现kafka消息积压分析dump追踪代码 定位结论经验总结&#xff0c;编码教训 问题现象 凌晨升级微服务&#xff0c;维护通知升级后某微服务频繁重启…

【Python开发】Python环境安装(Python3.8.0)与VS Code配置相应环境

一、安装Python环境 Python3.8.0下载连接 下载好后同意用户协议并点击安装 等待安装 安装完成 二、检查Python环境 按住键盘上的【Win】键【R】键&#xff0c;并在弹出窗口输入cmd 在弹出界面输入“Python”后&#xff0c;按下键盘回车键 若提示如下则Python环境安装成功 三、…

深入理解 iOS 中的 AutoLayout(一)

目录 1.前言 一、AutoLayout 基本概念 1.AutoLayout的概念 1.外部的变化 2.内部的变化 3.AutoLayout和基于frame的布局 2.不使用约束进行自动布局 1.xib使用UIStackView 2.纯代码方式设置UIStackView 3.AutoLayout中的约束 1.Auto Layout中的属性 1.边距约束 2.宽…

软件架构设计师-UML知识导图

软件架构设计师-UML知识导图&#xff0c;包含如下内容&#xff1a; 结构化设计&#xff0c;包含结构化设计的概念、结构化设计的主要内容、概要设计、详细设计及模块设计原则&#xff1b;UML是什么&#xff1a;介绍UML是什么&#xff1b;UML的结构&#xff1a;构造块、公共机制…

【SpringCloud】RabbitMQ——五种方式实现发送和接收消息

SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配。 SpringAmqp的官方地址&#xff1a;https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能&#xff1a; 自动声明队列、交换机及其绑定关系基于注解的…

Docker基本语法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、更新yum镜像仓库&#xff08;一&#xff09;查看本地yum镜像源地址&#xff08;二&#xff09;设置docker的镜像仓库&#xff08;1&#xff09;安装必要工具…

安卓相关环境配置

安卓相关环境配置 偶尔更新。。。 JEB&#xff08;动态调试好用&#xff09; JEB动态调试Smali-真机/模拟器&#xff08;详细&#xff0c;新手必看&#xff09; 夜步城 JADX官网&#xff08;静态分析&#xff09; https://github.com/skylot/jadx/releases/tag/v1.5.0 雷…

Upload-Lab第3关:如何巧妙应对黑名单文件后缀检测?

关卡介绍 在Pass03中,我们面临的挑战是绕过文件上传功能的黑名单检测机制。黑名单检测是一种常见的安全措施,它通过检查上传文件的后缀来阻止特定类型的文件(如 .php, .exe)被上传。在这一关,我们需要找到一种方法,上传一个可以执行的恶意文件,同时绕过黑名单检测。 …

Vue3学习 Day01

创建第一个vue项目 1.安装node.js cmd输入node查看是否安装成功 2.vscode开启一个终端&#xff0c;配置淘宝镜像 # 修改为淘宝镜像源 npm config set registry https://registry.npmmirror.com 3.下载依赖&#xff0c;启动项目 访问5173端口 第一个Vue项目的目录结构 我们先打…

C++ | Leetcode C++题解之第336题回文对

题目&#xff1a; 题解&#xff1a; //字典树节点 class TrieNode { private:bool isEnd;//单词结束标记int index;//单词序号vector<TrieNode*> children;//子节点 public://构造TrieNode():index(-1),isEnd(false),children(26,nullptr){}//析构~TrieNode(){for(int i…

php连接sphinx的长连接事宜以及sphinx的排除查询以及关于sphinx里使用SetSelect进行复杂的条件过滤或复杂查询

一、php连接sphinx的长连接事宜以及sphinx的排除查询 在使用php连接sphinx时&#xff0c;默认的sphinx连接非长连接&#xff0c;于是在想php连接sphinx能否进行一些优化 publish:January 9, 2018 -Tuesday: 方法&#xff1a;public bool SphinxClient::open ( void ) — 建立到…