每日一练(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;
}


目录
相关文章
|
5月前
力扣经典150题第四十题:同构字符串
力扣经典150题第四十题:同构字符串
35 1
|
6月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
104 0
|
存储 人工智能 算法
第四章 串(数据结构与算法)
第四章 串(数据结构与算法)
121 0
|
6月前
|
Java
java字符串练习题8、同构字符串
java字符串练习题8、同构字符串
52 0
java字符串练习题8、同构字符串
|
6月前
|
Java Go C++
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
67 0
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
|
6月前
|
Python Java Go
Python每日一练(20230407) 四舍六入五成双、编辑距离、分割回文串
Python每日一练(20230407) 四舍六入五成双、编辑距离、分割回文串
61 0
Python每日一练(20230407) 四舍六入五成双、编辑距离、分割回文串
|
6月前
|
存储 算法
算法题解-同构字符串
算法题解-同构字符串
|
6月前
leetcode-205:同构字符串
leetcode-205:同构字符串
44 0
|
存储 算法 前端开发
前端算法-字符串同构
前端算法-字符串同构
|
机器学习/深度学习 存储 算法