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;

    }
}
相关推荐
再卷也是菜10 分钟前
算法基础篇(8)贪心算法
算法·贪心算法·1024程序员节
AI科技星42 分钟前
接近光速运动下的光速不变性:基于张祥前统一场论的推导与验证
数据结构·人工智能·经验分享·算法·计算机视觉
陈苏同学1 小时前
笔记1.4:机器人学的语言——三维空间位姿描述 (旋转矩阵 - 齐次变换矩阵 - 欧拉角 - 四元数高效表示旋转)
笔记·线性代数·算法·机器人
scx201310042 小时前
20251025 分治总结
数据结构·c++·算法
碧海银沙音频科技研究院2 小时前
DiVE长尾识别的虚拟实例蒸馏方法
arm开发·人工智能·深度学习·算法·音视频
居7然3 小时前
DeepSeek OCR:重新定义AI文档处理的“降本增效”新范式
人工智能·算法·语言模型·自然语言处理·大模型·ocr
while(1){yan}3 小时前
数据结构之堆
数据结构·python·算法
SleepyWhite0014 小时前
代码随想录Day61|Floyd 算法精讲、A * 算法精讲
算法·floyd算法·astar算法
Miraitowa_cheems4 小时前
LeetCode算法日记 - Day 84: 乘积为正数的最长子数组长度
数据结构·算法·leetcode·贪心算法·线性回归·深度优先·动态规划