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;

    }
}
相关推荐
qyzm3 小时前
天梯赛练习(3月13日)
开发语言·数据结构·python·算法·贪心算法
逆境不可逃3 小时前
LeetCode 热题 100 之 64. 最小路径和 5. 最长回文子串 1143. 最长公共子序列 72. 编辑距离
算法·leetcode·动态规划
CoderCodingNo4 小时前
【GESP】C++五级练习题 luogu-P1182 数列分段 Section II
开发语言·c++·算法
放下华子我只抽RuiKe54 小时前
机器学习全景指南-直觉篇——基于距离的 K-近邻 (KNN) 算法
人工智能·gpt·算法·机器学习·语言模型·chatgpt·ai编程
kisshuan123964 小时前
[特殊字符]【深度学习】DA3METRIC-LARGE单目深度估计算法详解
人工智能·深度学习·算法
sali-tec4 小时前
C# 基于OpenCv的视觉工作流-章33-Blod分析
图像处理·人工智能·opencv·算法·计算机视觉
Eward-an5 小时前
LeetCode 239. 滑动窗口最大值(详细技术解析)
python·算法·leetcode
一叶落4385 小时前
LeetCode 50. Pow(x, n)(快速幂详解 | C语言实现)
c语言·算法·leetcode
皙然5 小时前
彻底吃透红黑树
数据结构·算法
t198751286 小时前
TOA定位算法MATLAB实现(二维三维场景)
开发语言·算法·matlab