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

news/2024/11/24 1:46:55/

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.ppmy.cn/news/1027030.html

相关文章

Oracle数据库中的CLOB字段类型,映射到Map<String,Object>中异常问题解决

数据库中的某个字段是CLOB类型的&#xff0c;我在查询某个SQL的时候&#xff0c;用Map<String&#xff0c;Object>来接。就会报错。 解决办法&#xff1a; 创建一个自定义处理类&#xff1a; MappedTypes 定义的是 JavaType 类型&#xff0c;可以指定哪些 Java 类型被…

元宇宙核能发电VR模拟仿真实训教学为建设新型电力系统提供重要支撑

随着“碳达峰、碳中和”目标与建设新型能源体系的提出&#xff0c;在元宇宙环境下建设电力系统是未来发展的趋势。以物联网、区块链、数字孪生、混合现实等技术为主要代表的元宇宙技术体系及其在电力和能源系统中的应用&#xff0c;将会促进智能电网的发展&#xff0c;为建设新…

从零开始理解Linux中断架构(25)中断运行全景实例

前面我们基本理解了软中断处理的基本框架,为了对中断调用有一个全景的直观感受,我们在网卡驱动程序的中断函数dump_stack,观看一下各种情况下的软中断调用call Stack的情况。 (1)ksoftirqd处理软中断的情况 有线以太网卡NAPI轮询的调用栈 [ 106.374117] Hardware name: K…

概率论与数理统计:第二、三章:一维~n维随机变量及其分布

文章目录 Ch2. 一维随机变量及其分布1.一维随机变量1.随机变量2.分布函数 F ( x ) F(x) F(x)(1)定义(2)分布函数的性质 (充要条件)(3)分布函数的应用——求概率3.最大最小值函数 2.一维离散型随机变量及其概率分布(分布律)3.一维连续型随机变量及其概率分布(概率密度)4.一般类型…

【分布式系统】聊聊高性能设计

每个程序员都应该知道的数字 高性能 对于以上的数字&#xff0c;其实每个程序员都应该了解&#xff0c;因为只有了解这些基本的数字&#xff0c;才能知道对于CPU、内存、磁盘、网络之间数据读写的时间。1000ms 1S。毫秒->微秒->纳秒-秒->分钟 为什么高性能如此重要的…

Mybatis动态SQL,标签大全

动态SQL常用场景 批量删除delete from t_car where id in(1,2,3,4,5,6,......这里的值是动态的&#xff0c;根据用户选择的 id不同&#xff0c;值是不同的);多条件查询哪些字段会作为查询条件是不确定的&#xff0c;根据用户而定 select * from 1 t_car where brand like 丰田…

【算法题】23. 合并 K 个升序链表

题目&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&#xff1a…

C++与Java中多态的不同

多态&#xff1a;父类引用指向子类对象。 C在使用子类实例化父类对象时&#xff0c;如果不用抽象(virtual)&#xff0c;那么无法实现多态性。 //不使用虚函数&#xff0c;即使重写&#xff0c;在Base* basePtr new Derived()后&#xff0c;也无法体现多态性。 class Base { p…