LeetCode算法题-Isomorphic Strings(Java实现)

MPU6050的四元数解算姿态方法 使用MPU6050硬件DMP解算姿态是非常简单的,下面介绍由三轴陀螺仪和加速度计的值来使用四元数软件解算姿态的方法。 我们先来看看如何用欧拉角描述一次平面旋转(坐标变换): MPU6050的四元数解算姿态方法 设坐标系绕旋转α角后得到坐标系,在空间中有一个矢量在坐标系中的投影为,在内的投影为由于旋转绕进行,所以Z坐标未变,即有。 转换成矩阵形式表示为: 即 所以从旋转到可以写成上面仅仅是绕一根轴的旋转,如果三维空间中的欧拉角旋转要转三次: MPU6050的四元数解算姿态方法 上面得到了一个表示旋转的方 阅读详情

这是悦乐书的第191次更新,第194篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第50题(顺位题号是205)。给定两个字符串s和t,确定它们是否是同构的。如果s中的字符可以替换为t,则两个字符串是同构的。

所有出现的字符必须替换为另一个字符,同时保留字符的顺序。 没有两个字符可以映射到相同的字符,但字符可以映射到自身。例如:

输入:s =“egg”,t =“add”
输出:true

输入:s =“foo”,t =“bar”
输出:false

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

注意:可以假设s和t都具有相同的长度。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

因为题目已经假设两个字符串的长度是相等的,所以不用考虑特殊情况。

使用两个HashMap,分别存储字符串s和字符串t的每一位字符,再使用两个新的字符串str和str2,分别存储其对应字符的结构,如果字符已经存在,则取出之前存的下标添加到str或str2中,如果是新出现,就把当前的下标添加到str或str2中。最后得到的str和str2就是s、t所表示的结构,如果str和str2相等,则返回true,否则返回false。

public boolean isIsomorphic(String s, String t) {
    Map<Character, Integer> map = new HashMap<>();
    String str = "";
    for (int i=0; i<s.length(); i++) {
        if (map.containsKey(s.charAt(i))) {
            str = str + map.get(s.charAt(i));
        } else {
            map.put(s.charAt(i), i);
            str += i;
        }
    }
    Map<Character, Integer> map2 = new HashMap<>();
    String str2 = "";
    for (int j=0; j<t.length(); j++) {
        if (map2.containsKey(t.charAt(j))) {
            str2 = str2 + map2.get(t.charAt(j));
        } else {
            map2.put(t.charAt(j), j);
            str2 += j;
        }
    }
    return str.equals(str2);
}

时间复杂度:因为for循环中使用了HashMap的containsKey方法,而此方法最好的情况就是要判断的key正好是第一位,则containsKey方法的时间复杂度是O(1),最坏的情况是要判断的key在最后一位,则containsKey方法的时间复杂度是O(n)。因此,此解法的时间复杂度最好情况是O(n),最坏情况是O(n^2)。

空间复杂度:O(n)

03 第二种解法

依旧使用两个HashMap,同样是将两个字符串的各个字符放入map中,不过由第一种解法的分开放变成同时放,如果在进行put的时候,有两种情况:当前字符在map中不存在的时候,返回null;当前字符在map中存在的时候,返回此字符作为key所关联的之前的value。如果两边的字符进行put操作而不相等,即说明此字符在两个map中的其中一个已经出现过一次,但是另外一个没出现过,也就表示两字符串的结构是不同的。

public boolean isIsomorphic2(String s, String t) {
    Map<Character, Integer> map = new HashMap<>();
    Map<Character, Integer> map2 = new HashMap<>();
    for (Integer i=0; i<s.length(); i++) {
        if (map.put(s.charAt(i), i) != map2.put(t.charAt(i), i)) {
            return false;
        }
    }
    return true;
}

04 第三种解法

只使用一个HashMap。思路与上面两种解法类似,不过是将字符串s的各个字符当成了map的key,将字符串t的各个字符当成map的value。只要map中存在当前的字符key,那么其所对应的value应该和另外一个字符串的当前字符相等,否则就是结构不同。

public boolean isIsomorphic3(String s, String t) {
    HashMap<Character, Character> map = new HashMap<>();
    int size = s.length();
    for (int i = 0; i < size; i++) {
        if (map.containsKey(s.charAt(i))) {
            if (t.charAt(i) != map.get(s.charAt(i))) {
                return false;
            }
        } else {
            if (map.containsValue(t.charAt(i))) {
                return false;
            }
            map.put(s.charAt(i), t.charAt(i));
        }
    }
    return true;
}

05 第四种解法

对于上面的解法使用HashMap来存字符,我们可以只用数组来替代,因为组成字符串的字符类型有限,ASCII码只有256个字符,所以我们预先定义好两个大小为256的整型数组,创建后两数组中的元素初始值都是0。此时,我们使用for循环对字符串s进行遍历,当前字符所表示的十进制值当做是数组的索引,如果该索引分别对应的值不相等,则说明两字符串不是同结构,否则,就将循环内的指针i作为其索引对应的值。其中i是从0开始的,但是数组初始化后其内所有元素都是默认值0,所以需要加1来区别默认值0。

public boolean isIsomorphic4(String s, String t) {
    int[] m1 = new int[256];
    int[] m2 = new int[256];
    for (int i = 0; i < s.length(); i++) {
        if (m1[s.charAt(i)] != m2[t.charAt(i)]) return false;
        m1[s.charAt(i)] = i + 1;
        m2[t.charAt(i)] = i + 1;
    }
    return true;
}

此解法时间复杂度是O(n),空间复杂度是O(1)。

06 小结

算法专题目前已连续日更超过一个月,算法题文章50+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

1.2 从“跟网”到“构网”:技术范式的历史性转变 新型电力系统面临"双高"特征带来的稳定性挑战,促使并网控制技术从"跟网型"向"构网型"范式转变。传统跟网型变流器作为受控电流源依赖强电网,存在短路电流能力有限、易失稳等缺陷;而构网型变流器模拟同步发电机特性,作为受控电压源具备自主建立电压/频率、提供虚拟惯性、增强短路容量和改善系统阻尼四大核心能力。这一技术范式转变使变流器从电网跟随者变为构建支撑者,成为解决新能源大规模接入稳定性的关键。 阅读详情

相关推荐

生态位宽度计算&可视化展示(R语言)

物种的生态位越宽,该物种的特化程度就越小,倾向于泛化种(generalist species);物种的生态位越窄,倾向于是一个特化种(specialists species)。生态位宽度是指物种(或其它生物单位)在群落中所利用的各种不同资源的总和。本篇所使用为生态位宽度指数即**Levins的生态位宽度指数。

weixin_53705272的博客 4435

leetcode 205: Isomorphic Strings

Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a character must be replaced with a

西施豆腐渣 8490

deepfake detection数据集

最全Deepfake数据集总结,包含各个数据集下载链接: https://github.com/deepfakeinthewild/deepfake_in_the_wild Dataset name Download Generate method Deepfake videos Actors Deepfake-TIMIT low download De...

where_is_horse的博客 1万+

[leetcode-205]Isomorphic Strings(java)

问题描述: Given two strings s and t, determine if they are isomorphic.Two strings are isomorphic if the characters in s can be replaced to get t.All occurrences of a character must be replaced with anothe

中华胡杨的专栏 607

AI 大模型在电商精准营销中的应用

例如,对于用户 A 和用户 B,通过比较他们对共同评价过的商品的评分差异来确定相似度。其中,(Gain(D,a))表示特征(a)对数据集(D)的信息增益,(Ent(D))表示数据集(D)的信息熵,(V)表示特征(a)的取值个数,(D^{v})表示特征(a)取值为(v)的样本子集。其中,(sim(A,B))表示用户 A 和用户 B 的相似度,(I)表示用户 A 和用户 B 共同评价过的商品集合,(R_{A,i})和(R_{B,i})分别表示用户 A 和用户 B 对商品(i)的评分。(三)营销活动效果预测。

alittlehippo的博客 1627

Avalonia 项目结构说明

Avalonia UI

bjxingch的博客 1271

leetcode.205.同构字符串(isomorphic-strings)

同构字符串(isomorphic-strings) java 同构字符串(isomorphic-strings) 题解 package isomorphic_strings; import java.util.HashMap; public class Solution { public boolean isIsomorphic1(String s, String t) { char[] chars = s.toCharArray(); char[] char

mirana的专栏 230

【项目实战】分布式日志系统 之 Exactly-once 语义:确保数据处理的精确性

在分布式系统的数据传输与处理中,是一种核心可靠性保障,其目标是确保数据“仅被处理一次”——既不重复(避免多次处理),也不遗漏(避免未处理)。与,二者共同保障数据处理的精确性。Exactly-once 语义是分布式系统中数据可靠性的高级目标,其核心通过“幂等设计”(解决重复问题)和“分布式事务”(解决原子性问题)实现。在实际应用中,常结合 At-Least-Once 语义与幂等性,或通过事务 API 与唯一 ID 去重的组合,平衡可靠性与系统性能。

奶爸的编程之路,也就一周冷个三天 167

LeetCode中的Isomorphic Strings 的java实现

题目是全英文的,不过都是简单的英文,一般都可以完全看懂,题目如下: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of

snchenjt的专栏 463

目前固态激光雷达在机器人领域的应用难点汇总

固态激光雷达在机器人领域面临性能与成本的双重挑战:探测性能上,动态范围不足(60-80dB)导致高/低反射物体识别困难,近距盲区(30-50cm)与长距精度(±3cm)矛盾突出;结构上视场角与点云密度难以平衡,多雷达拼接又带来同步误差。成本方面,核心元件(SPAD/OPA芯片)良率低(<50%)、校准工序复杂,单机成本超200美元。环境适应性上,粉尘附着、振动偏移(±2°)和光衰(1万小时衰减15%)制约可靠性。

start_up_go的博客 481

AutoSAR配置与实践(基础篇)3.2 BSW中的I/O架构和模块详解

车门位置传感器(Sensor SWC)输出的电流信号经过了一系列处理,如先被转化为电压信号,后又经ADC转换为数字信号,但是IoHwAb模块对上层隐藏了这一系列处理过程,并将数据直接抽象为它的输出接口,即车门开关状态接口。Sensor SWC 使用RTE接口直接从IoHwAb模块封装的车门开关状态,SWC它并不关心ECU硬件是如何实现的传感器电流采集,也不关心MCU ADC采样精度(如10/12位)IoHwAb把采集的电压抽象为开关状态,使得Sensor SWC不依赖具体的ECU硬件。

nihaoljq2010的博客 1300

【Leetcode】Isomorphic Strings

题目链接:https://leetcode.com/problems/isomorphic-strings/ 题目: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to ge

业精于勤,荒于嬉 1905

【QT开发教程】使用Qt进行蓝牙低功耗(BLE)编程

蓝牙低功耗(BLE,Bluetooth Low Energy)技术广泛应用于现代设备中,例如智能手表、健身追踪器和物联网设备。Qt提供了一套完整的Bluetooth模块,使开发者可以轻松地在应用程序中实现BLE通信功能。本文将介绍如何在Qt中进行BLE编程,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 2869

leetcode (Isomorphic Strings)

Title:Isomorphic Strings    205 Difficulty:Easy 原题leetcode地址:  https://leetcode.com/problems/isomorphic-strings/   1.  Map + Set 时间复杂度:O(n),一层for循环,最长遍历为字符串的长度。 空间复杂度:O(n),申请Map和Set。 /** ...

hsx1612727380的专栏 185

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Leetcode_205_Isomorphic Strings

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/46530865 Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a ch

皮斯特劳沃 2143

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

leetcode Isomorphic Strings

题目链接点击打开链接 这个题我一开始以为只有26个字母。所以代码写出了这个 public class Solution { private static boolean flag[]=new boolean[26]; private static char map[]=new char[26]; public boolean isIsomorphic(String s, St

bleuesprit的专栏 411

LeetCode-205. Isomorphic Strings [C++][Java]

Given two stringssandt,determine if they are isomorphic. Two stringssandtare isomorphic if the characters inscan be replaced to gett.

贫道绝缘子的博客 308

LeetCode_Isomorphic Strings

Isomorphic Strings Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a character must be

sunp823的专栏 410

[LeetCode 205] Isomorphic Strings

题目链接:isomorphic-strings Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a cha

瓦尔登湖 1523

LeetCode 205. Isomorphic Strings

欢迎访问原文所在博客:https://52heartz.top/articles/leetcode-205-isomorphic-strings/ 解答1[Java]: class Solution { public boolean isIsomorphic(String s, String t) { int[] m1 = new int[256]; in...

user2639的博客 158

【leetcode】Isomorphic Strings【java】

题目: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a character must be replaced

yage_123的博客 406

[LeetCode] Isomorphic Strings

Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a character must be replaced with anot

列苗 617

leetcode Isomorphic Strings题解

题目描述: Given two stringssandt, determine if they are isomorphic. Two strings are isomorphic if the characters inscan be replaced to gett. All occurrences of a character must be replaced with a...

leo_weile的博客 202

[java] LeetCode 205. Isomorphic Strings | 同构字符串

题目描述 分析 这题考查的是映射表的建立,映射表一般通过map的数据结构来实现;题目中也提到了一个字符不能被重复映射,这令我想到了set到数据结构。因此这题需要用到HashMap和HashSet。 特殊情况处理:长度不等,直接返回false。 过程描述:取出对应位置的两个字符串的字符a和b。先判断map中是否存在这个字符,如果存在,则必须满足b等于a在map中的映射值,否则返回false;如果m...

马一凡的博客 334

LeetCode-Isomorphic Strings

LeetCode Java Isomorphic Strings

坟头草一米七五 206

LeetCode Isomorphic Strings

原题链接在此:https://leetcode.com/problems/isomorphic-strings/ Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to

Dylan_Java_NYC的博客 511
上一篇: LeetCode算法题-Count Primes(Java实现)
下一篇: LeetCode算法题-Reverse Linked List(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值