LeetCode150道面试经典题--同构字符串(简单)

news2024/12/23 0:28:06

1.题目

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

2.示例/提示


3.思路

哈希表:

        首先两个字符串如果长度不相等,那么一定是不会一一对应的。然后一个键映射一个值,很明显就能联想到使用哈希表(HashMap),一次遍历一个字符串,当s串中遍历时候遇到map中不存在的键并且当前的值并不对应前面的键的时候,那么就通过put方法让两者一一对应。而如果遇到存在的键时候,就需要将存在的键对应的值与当前值比较,如果不一致则返回false。如果一直没有提前返回false,则最后输出true

如果不熟悉哈希表或者忘了相关内容可以在此复习Java类集框架(二)_Alphamilk的博客-CSDN博客

4.代码

LeetCode代码:

class Solution {
    public boolean isIsomorphic(String s, String t) {
        if (s.length()!=t.length()){
            return false;
        }
        HashMap<Character,Character> map = new HashMap<>();

        for (int i=0;i<s.length();i++){
            if (!map.containsKey(s.charAt(i))){
                if (map.containsValue(t.charAt(i))){
                    return false;
                }
                map.put(s.charAt(i),t.charAt(i));
            }else {
                if (map.get(s.charAt(i)) != t.charAt(i)){
                    return false;
                }
            }
        }
        return true;
    }
}

时间复杂度O(n)空间复杂度O(1)

在仔细想了一下之后,没找到内存可以优化的地方,再看了一下原来大伙都是用同解

详细案例代码:

package LeetCode13;

import java.util.HashMap;

public class javaDemo {
    public static void main(String[] args) {
//        判断同构字符串
        String s = "badc";
        String t = "baba";
        boolean flag = true;
//        提前判断是否特殊情况,减少不必要的开销
        if (s.length()!=t.length()){
            flag = false;
        }
//        创建哈希表
        HashMap<Character,Character> map = new HashMap<>();
//        s串遍历
        for (int i=0;i<s.length();i++){
//            当s串当前遍历的元素并不是map中的键时候
            if (!map.containsKey(s.charAt(i))){
//                在不存在map的前提下,如果当前值已经被前面的键用了那么直接输出失败
                if (map.containsValue(t.charAt(i))){
                    flag = false;
                    break;
                }
//                否则就将键值一一对应
                map.put(s.charAt(i),t.charAt(i));
            }else {
//                当当前遍历键存在时候,则通过get得到键对应的值再与当前值比较
                if (map.get(s.charAt(i)) != t.charAt(i)){
                    flag = false;
                    break;
                }
            }
        }
//        最后输出结果
        System.out.println(flag);
    }
}

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

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

相关文章

2022年06月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;倒序输出 依次输入4个整数a、b、c、d,将他们倒序输出&#xff0c;即依次输出d、c、b、a这4个数。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 一行4个整数a、b、c、d&#xff0c;以空格分隔。 0 < a,b,c,d < 108 输出 一行4个整数d、c、…

11.集群调度

文章目录 集群调度调度约束list-watc机制的概念pod的创建流程 调度过程Scheduler 作用预选策略优选策略指定调度节点nodeNamenodeSelector 亲和性node亲和pod亲和pod反亲和 污点&#xff08;Taint&#xff09;和容忍&#xff08;Tolerations&#xff09;污点(Taint)容忍(Tolera…

QT的界面切换

QT的界面切换 步骤一: 创建一个新的 ui 界面

pycharm配置conda虚拟环境

&#x1f4d5;作者简介&#xff1a;热编程的贝贝&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步健身&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于贝贝的日常汇报系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏深度学习、…

安装paddlehub后测试运行报错

昨晚按照官网提示安装paddle和paddlehub后&#xff0c;运行paddle测试成功了。但是当我测试paddlehub的时候总是提示缺少模块&#xff0c;非常纳闷&#xff0c;后面发现是官方的坑&#xff0c;所以在这里做个笔记。 测试paddlehub报错&#xff1a; #安装paddlehub命令 pip in…

权限管理之admin数据不可编辑

效果图 在线地址&#xff1a;https://codesandbox.io/s/authorizedbyrole-yzy4r2?file/src/util/directive.js 当前用户为非管理员角色 环境 vuetify2.6.6 vuex javascript 事情经过 一般的系统&#xff0c;都是采用**RBAC模型&#xff1a;基于用户-角色-权限控制** 所以在…

前端接口修改工具 Requestly具体操作

更新于2023年8月12日18:17:56&#xff0c;插件版本可能会变&#xff0c;界面可能会有所变化 插件下载地址&#xff1a;https://chrome.google.com/webstore/detail/requestly-open-source-htt/mdnleldcmiljblolnjhpnblkcekpdkpa 注意&#xff0c;必须用谷歌浏览器&#xff0c;…

安达发|APS车间排产软件对PCB企业有哪些意义?

PCB(printed circuit board)即印制线路板&#xff0c;简称印制板&#xff0c;是电子工业的重要部件之一。几乎每种电子设备&#xff0c;小到电子手表、计算器&#xff0c;大到计算机、通信电子设备、军用武器系统&#xff0c;只要有集成电路等电子元件&#xff0c;为了使各个元…

中科亿海微乘法器(LPMMULT)

引言 FPGA&#xff08;可编程逻辑门阵列&#xff09;是一种可在硬件级别上重新配置的集成电路。它具有灵活性和可重构性&#xff0c;使其成为处理各种应用的理想选择&#xff0c;包括数字信号处理、图像处理、通信、嵌入式系统等。在FPGA中&#xff0c;乘法器是一种重要的硬件资…

WPS-0DAY-20230809的分析和利用复现

WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调&#xff1a;以下内容仅供学习和测试&#xff0c;一切行为均在…

STM32CubeMX之freeRTOS中断系统

任何中断的优先级都大于任务 优先级是从5-15 而不是0-15 因为前几个已经被freertos所控制了&#xff0c;因为操作系统不是万能的&#xff0c;所以我们需要弄一些中断凌驾在我们操作系统之上&#xff0c;中断中必须使用中断相关的函数&#xff01; 中断不能使用阻塞函数&#…

数据结构:力扣OJ题

目录 ​编辑题一&#xff1a;链表分割 思路一&#xff1a; 题二&#xff1a;相交链表 思路一&#xff1a; 题三&#xff1a;环形链表 思路一&#xff1a; 题四&#xff1a;链表的回文结构 思路一&#xff1a; 链表反转&#xff1a; 查找中间节点&#xff1a; 本人实力…

特语云用Linux和MCSM面板搭建 我的世界基岩版插件服 教程

Linux系统 用MCSM和DockerWine 搭建 我的世界 LiteLoaderBDS 服务器 Minecraft Bedrock Edition 也就是我的世界基岩版&#xff0c;这是 Minecraft 的另一个版本。Minecraft 基岩版可以运行在 Win10、Android、iOS、XBox、switch。基岩版不能使用 Java 版的服务器&#xff0c;…

Java多线程(十)

目录 一、synchronized基本特点 二、synchronized加锁工作过程 2.1 无锁 2.2 偏向锁 2.3 轻量级锁 2.4 重量级锁 三、synchronized其他优化操作 3.1 锁消除 3.2 锁粗化 一、synchronized基本特点 开始是乐观锁&#xff0c;如果锁冲突频繁就会转换成悲观锁开始是轻量级锁&#x…

python小白之matplotlib使用实战项目:随机漫步

文章目录 随机漫步1.1 创建RandomWalk类1.2 选择方向1.3 绘制随机漫步图1.4 模拟多次随机漫步1.5 设置随机漫步图样式1.5.1 给点着色1.5.2 重新绘制起点和终点1.5.3 隐藏坐标轴1.5.4 增加点数1.5.5 调整图片尺寸以适应屏幕 附录&#xff08;项目代码&#xff09;random_walk.py…

Linux 外部命令 - cat

Linux 外部命令 cat 英文帮助 NAME cat - concatenate files and print on the standard output SYNOPSIS cat [OPTION]... [FILE]... DESCRIPTION Concatenate FILE(s) to standard output. With no FILE, or when FILE is -, read standard input.…

ChatAI的几十种高级用法,可能是比较全的了(文末送书)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【Kafka】1.Kafka简介及安装

目 录 1. Kafka的简介1.1 使用场景1.2 基本概念 2. Kafka的安装2.1 下载Kafka的压缩包2.2 解压Kafka的压缩包2.3 启动Kafka服务 1. Kafka的简介 Kafka 是一个分布式、支持分区&#xff08;partition&#xff09;、多副本&#xff08;replica&#xff09;、基于 zookeeper 协调…

消息中间件 —— 初识Kafka

文章目录 1、Kafka简介1.1、消息队列1.1.1、为什么要有消息队列&#xff1f;1.1.2、消息队列1.1.3、消息队列的分类1.1.4、p2p 和 发布订阅MQ的比较1.1.5、消息系统的使用场景1.1.6、常见的消息系统 1.2、Kafka简介1.2.1、简介1.2.2、设计目标1.2.3、kafka核心的概念 2、Kafka的…

Java pb3中 int类型的字段值0怎么判断是未设置值还是设置了值0

Java pb3中 int类型的字段值0怎么判断是未设置值还是设置了值0 1. 效果图2. 源码参考 Java pb3对 各种类型的默认值进行序列化时省略了。如int类型的字段为0或者null都会省略&#xff0c;但反序列化都可以序列化为0. proto3&#xff0c; required 和 optional 已在新语法中删除…