leetcode算法205.同构字符串

简介: 给定两个字符串 s 和 t ,如何判断它们是否是同构的?本文带大家解决这个问题。

一、leetcode算法


1、同构字符串


1.1、题目


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


如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。


每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。


示例 1:


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

输出:true


示例 2:


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

输出:false


示例 3:


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

输出:true


1.2、思路


思路一:此题我们我们根据题意可以使用两个哈希表来解决,这个可以将映射关系对应起来,假如第一张表的a和第二张表的b,我们在第一个哈希表中可以已a为键,以b为值,在第二个哈希表中可以以b为键,以a为值,当第一个表中再出现a的时候我们可以将a的值b取出来,和当前b的值来进行比较即可得出当前数是否正确。


1.3、答案


3.png


class Solution {
    public boolean isIsomorphic(String s, String t) {
        //定义两个哈希表
        Map<Character,Character> smap = new HashMap<Character,Character>();
        Map<Character,Character> tmap = new HashMap<Character,Character>();
        int len = s.length();
        for(int i = 0; i < len; i++){
            char x = s.charAt(i), y = t.charAt(i);
            if((smap.containsKey(x) && smap.get(x) != y) || (tmap.containsKey(y) && tmap.get(y) != x)){
                return false;
            }
            smap.put(x,y);
            tmap.put(y,x);
        }
        return true;
    }
}


相关文章
|
3月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
9月前
|
Go 索引
【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
264 6
|
10月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
364 11
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
338 4
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
131 9
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
184 1
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
192 2
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
235 0
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
153 0
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
305 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行