leetcode 205.同构字符串

题目描述

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

如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。

所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

示例 1:

输入: s = "egg", t = "add"
输出: true

示例 2:

输入: s = "foo", t = "bar"
输出: false

示例 3:

输入: s = "paper", t = "title"
输出: true

说明:
你可以假设 s 和 t 具有相同的长度。

解题思路

这个题重点是理解一下题目中的这一句话:两个字符不能映射到同一个字符上,意思是字符映射是一一对应的关系,不能一对多或者多对一,举个例子:s=“aabaa”, t=“ccdee”,s和t就不是同构字符串,因为在s->t的过程中,‘a’的映射关系是’a’->‘c’、‘a’->‘e’,即’c’和’e’同时映射到’a’上了,所以不符合。那么知道了这个以后,就可以通过建立一个哈希表来判断是否同构。首先我们需要知道s->t映射的过程中是否同构,然后在判断t->s是否同构,两个同时满足的时候,才能代表s、t是同构字符串。为什么要判读两次呢,举个例子:s = “bar”, t = “foo”,在映射的过程中,看下表:

s->t t->s
‘b’->‘f’ ‘f’->‘b’
‘a’->‘o’ ‘o’->‘a’
‘r’->‘o’ ‘o’->‘r’

从表格上,如果建立哈希对应感谢,s->t的过程中是判断不出来是否为同构,但是t->s过程中,就可以看出来’o’不是一一对应的,所以要进行两次判读,同时为true的时候,才可以判断是同构字符串

class Solution {public:bool isIsomorphic(string s, string t) {if(s.size() != t.size()){  // 如果两个字符串的长度不相等,表示两个是非同构字符串return false;}return helper(s, t) && helper(t, s);}bool helper(string str1, string str2){unordered_map<char, char> map;   //建立映射哈希表int len = str1.size();for(int i=0; i<len; i++){if(map.find(str1[i]) == map.end()){     // 表中是否存在,不存在添加数据map[str1[i]] = str2[i];}else{if(map[str1[i]] != str2[i]){       // 如果存在判断map的键对应的值是否和当前str2中的值相等,如果不相等表示存在一对多的问题,返回falsereturn false;}}}return true;}
};

欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步

leetcode 205.同构字符串相关推荐

  1. LeetCode 205. 同构字符串(哈希map)

    1. 题目 给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序. 两个字符 ...

  2. leetcode 205. 同构字符串(hash)

    给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一 ...

  3. leetcode 205. 同构字符串

    题目 思路 维护两个 HashMap,一个存放字符串 1 到字符串 2 的映射,另一个存放字符串 2 到字符串 1 的映射. 对于字符串中的每一个字符,分别验证是否符合这两个映射. 题解 import ...

  4. Leetcode 205. 同构字符串 解题思路及C++实现

    解题思路: 仔细阅读题意,应注意到一个 hash表是不够的,需要新建两个hash表,分别存储 s->t 和 t->s 的映射. class Solution { public:bool i ...

  5. 2022-1-19 Leetcode.205.同构字符串

    自己的写法,使用双向映射. /*class Solution { public:bool isIsomorphic(string s, string t) {if(s.size() != t.size ...

  6. 【LeetCode】205. 同构字符串 【Map 双射】

    题目链接:https://leetcode-cn.com/problems/isomorphic-strings/ 题目描述 给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以 ...

  7. LeetCode:205(Python)—— 同构字符串(简单)

    同构字符串 概述:给定两个字符串 s 和 t ,判断它们是否是同构的.如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的.每个出现的字符都应当映射到另一个字符,同时不改变字符 ...

  8. LeetCode简单题之同构字符串

    题目 给定两个字符串 s 和 t ,判断它们是否是同构的. 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的. 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序. ...

  9. LeetCode实战:字符串相乘

    题目英文 Given two non-negative integers num1 and num2 represented as strings, return the product of num ...

最新文章

  1. Android 进程常驻(使用第三方MarsDaemon)(虽然不可用,但是还是保留下。)
  2. c#v2.0 扩展特性 翻译(1)
  3. leetcode—Best Time to Buy and Sell stocks III
  4. 另我模糊的URL 重写
  5. 算法:求两个数最大公约数
  6. 【软件工程】第一次阅读作业
  7. nowcoder猜想c语言筛子,剑指 Offer 50 道经典算法题视频讲解
  8. 学子商城网站的设计与实现
  9. 二维联合分布(X,Y)求(U,V)
  10. 税控系统链接服务器失败,税控系统连接服务器安全地址
  11. java 图片拼接_Java实现图片拼接
  12. 沃趣赵晨 | 从技术岗位到产品经理:漫谈IT产品经理的生存之道
  13. QLineEdit的焦点事件
  14. Visual Studio界面颜色更换 及 Visual Assist X助手使用
  15. 程序员不仅是鼠标手,还是段子手
  16. oracle图书管理项目案例,C#+oracle做的图书管理系统
  17. Python----数据分析-使用scikit-learn构建模型实训(wine数据集、wine_quality数据)
  18. 信息技术优质课评价标准
  19. 3dmax软件的制作木桶过程:三步流程
  20. 前端—基于Flask框架调用百度接口实现语音识别功能(使用蓝图blueprint)

热门文章

  1. java中负数的二进制表示,【Java基础】15、负数的二进制表示方法
  2. 深圳三职计算机系,深圳市第三职业技术学校教师周贵航 职业技能人才将迎来黄金发展期...
  3. JQuery动态添加/删除class样式
  4. 读书笔记:《流畅的Python》第15章 上下文管理器和else块
  5. 交换机启用光口命令_cisco交换机通过命令行查看光纤接口类型
  6. jquery+ajax无刷新翻页
  7. Google weather API 天气使用方式
  8. rk3399主控+bq4050充电管理芯片,驱动,配置
  9. 深度学习 分类问题与回归问题
  10. 结合奥维地图与百度地图api进行路径规划开发测试(python、HTML)