LeetCode 205 同构字符串

题目

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

如果 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
  • st 由任意有效的 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

代码

java 复制代码
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;

    }
}
相关推荐
加减法原则33 分钟前
求最大子数组和 | LeetCode刷题
算法
折枝寄北1 小时前
从零开始 | C语言基础刷题DAY1
c语言·开发语言·算法
.ccl1 小时前
蓝桥杯省赛真题C++B组2024-握手问题
c++·算法·蓝桥杯
arong_xu2 小时前
C++20 新特性总结
算法·c++20
hrrrrb2 小时前
【C语言】指针篇
c语言·数据结构·算法
神里流~霜灭2 小时前
下降路径最⼩和(medium)
数据结构·c++·算法·链表·贪心算法·动态规划
编程绿豆侠2 小时前
力扣HOT100之双指针:11. 盛最多水的容器
算法·leetcode·职场和发展
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧2 小时前
C语言_数据结构总结4:不带头结点的单链表
c语言·开发语言·数据结构·算法·链表·visualstudio·visual studio
a李兆洋2 小时前
力扣 Hot 100 刷题记录 - LRU 缓存
算法·leetcode·缓存
算法与编程之美3 小时前
冒泡排序
java·开发语言·数据结构·算法·排序算法