每日一练(43):同构字符串

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

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


如果 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


s 和 t 由任意有效的 ASCII 字符组成


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一


思路分析


t.length == s.length 所以无需考虑长度


相同的字符用find找到的index一定是一样的


利用这点我们可以利用find来验证是否pattern相同


  1. 假设有foo和baa,当我们到最后一个index时s里找'o'和t里找'a'一定会返回
  2. 相同的index,因为之前已经出现过了,这里s里的'o'跟t里的'a'都会返回index 1
  3. 再假设我们有foo和bar,'fo'和'ba'是没有问题的,但是当我们到最后一个index时
  4. s里的'o'会返回1,因为之前已经出现过,而t里的'r'会返回2,因为之前并没有
  5. 出现过这个字母,这样就可以验证他们的pattern是否相同


bool isIsomorphic(string s, string t) {
    for (int i = 0; i < s.size(); ++i) {
        if (s.find(s[i]) != t.find(t[i])) {
            return false
        }
    }
    return true;
}


方法二


思路分析


为具有对应关系的字符连边并赋予权值,初始值为 0 表示未有映射关系,同为 0 才能连边


因此如果是同构字符串,每对字符的值应该相等


bool isIsomorphic(string s, string t) {
    int sm[128] = {0};
    int tm[128] = {0};
    for (int i = 0; i < s.size(); i++) {
        if (sm[s[i]] != tm[t[i]]) {
            return false;
        }
        sm[s[i]] = tm[t[i]] = i + 1;
    }
    return true;
}


目录
相关文章
|
9月前
leetcode-205:同构字符串
leetcode-205:同构字符串
53 0
leetcode 205 同构字符串
leetcode 205 同构字符串
66 0
|
Python
LeetCode 205. 同构字符串
给定两个字符串 s 和 t,判断它们是否是同构的。
97 0
|
算法 Java C#
【算法千题案例】⚡️每日LeetCode打卡⚡️——62. 同构字符串
📢前言 🌲原题样例:同构字符串 🌻C#方法:一次遍历 🌻Java 方法:哈希 💬总结
|
8月前
力扣经典150题第四十题:同构字符串
力扣经典150题第四十题:同构字符串
51 1
|
算法
leetcode算法205.同构字符串
给定两个字符串 s 和 t ,如何判断它们是否是同构的?本文带大家解决这个问题。
131 0
leetcode算法205.同构字符串
|
9月前
|
存储 算法
算法题解-同构字符串
算法题解-同构字符串
|
Go
Golang每日一练(leetDay0071) 同构字符串、反转链表
Golang每日一练(leetDay0071) 同构字符串、反转链表
109 0
Golang每日一练(leetDay0071) 同构字符串、反转链表
|
9月前
|
Java
java字符串练习题8、同构字符串
java字符串练习题8、同构字符串
70 0
java字符串练习题8、同构字符串

热门文章

最新文章