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


目录
相关文章
|
2月前
|
C++
【C++数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】(1)遇到左括号:进栈Push()(2)遇到右括号:若栈顶元素为左括号,则出栈Pop();否则返回false。(3)当遍历表达式结束,且栈为空时,则返回true,否则返回false。本关任务:编写一个程序利用栈判断左、右圆括号是否配对。为了完成本关任务,你需要掌握:栈对括号的处理。(1)遇到左括号:进栈Push()开始你的任务吧,祝你成功!测试输入:(()))
43 7
|
10月前
|
Java Go Rust
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
112 0
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
|
10月前
|
存储 算法
算法题解-同构字符串
算法题解-同构字符串
|
10月前
leetcode-205:同构字符串
leetcode-205:同构字符串
53 0
|
Go
Golang每日一练(leetDay0071) 同构字符串、反转链表
Golang每日一练(leetDay0071) 同构字符串、反转链表
119 0
Golang每日一练(leetDay0071) 同构字符串、反转链表
|
存储 算法 前端开发
前端算法-字符串同构
前端算法-字符串同构
|
Go
第77/90步《番外篇》第4章 Go语言三:复合数据类型 第32课
今天学习《番外篇》第4章 Go语言三:复合数据类型 第32课 字典
73 0
|
Go
第76/90步《番外篇》第4章 Go语言三:复合数据类型 第31课
今天学习《番外篇》第4章 Go语言三:复合数据类型 第31课 切片
86 0
|
Go
第75/90步《番外篇》第4章 Go语言三:复合数据类型 第30课
今天学习《番外篇》第4章 Go语言三:复合数据类型 第30课 数组
61 0
|
安全 Go
第79/90步《番外篇》第4章 Go语言三:复合数据类型 第34课
今天学习《番外篇》第4章 Go语言三:复合数据类型 第34课 指针与错误
88 0