介绍:给定两个字符串 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中的每个字符映射到t中的对应字符,这样的映射关系是唯一的,同样,从t映射到s,字符的映射关系也是唯一的。比如s=“paper”, t = “title”,从s到t,和从t到s,每个字符的映射关系唯一。但是对于s=“ab”,t=“aa”,则存在两个字符映射到一个字符,那么就不是同构字符串。

源代码:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include <sstream>
#include<map>
#include<set>using namespace std;bool isIsomorphic(string s, string t)
{bool result = true;set<char> cset;map<char, char> mapset_s;map<char, char>::iterator it;for (int i = 0; i < s.length(); i++){if (!mapset_s[s[i]]){mapset_s[s[i]] = t[i];}else{if (mapset_s[s[i]] != t[i]){return false;}}}for (it = mapset_s.begin(); it != mapset_s.end(); it++){cset.insert(it->second);}if (cset.size() != mapset_s.size()){result = false;}return result;
}
int main()
{string s = "ab", t = "aa";bool result = isIsomorphic(s, t);cout <<result<< endl;system("pause");return 0;
}

官方给的解析:可以使用字典 dict 来记住这些字符对是一个很方便的做法。在这里面用了两个字典 dict,一个字典 hashmap 用来记 s 的字符到 t 的映射,另一个字典 ismap 用来记录 t 的字符到 s 的映射,用于判断 t 中的两个字符不能由 s 中同一个字符映射而来。这个思想和我上述的思想类似,我是先用一个map保存s到t的映射,然后取出map的第二个值,将其放入到set中,判断set的大小和map的大小是否相同。第一个map确保s到t的映射,第二个set则确保t到s的映射,如果两个长度不相同,则字符之间的映射不唯一。

class Solution:def isIsomorphic(self, s, t):""":type s: str:type t: str:rtype: bool"""hashmap = {}ismap = {}for i in range(len(s)):if s[i] in hashmap:if hashmap[s[i]] != t[i]:return Falseelse:if t[i] in ismap:return Falsehashmap[s[i]] = t[i]ismap[t[i]] = Truereturn True

LeetCode之同构字符串相关推荐

  1. leetcode 205.同构字符串

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

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

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

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

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

  4. leetcode 205. 同构字符串

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

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

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

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

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

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

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

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

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

  9. LeetCode实战:字符串相乘

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

  10. LeetCode实战:字符串相加

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

最新文章

  1. Storm-源码分析-Stats (backtype.storm.stats)
  2. java todo error_java基础-异常
  3. 《深入浅出玩转FPGA》笔记
  4. python学习实例(4)
  5. 【开发软件】推荐一款MAC OS X 下php集成开发环境mamp
  6. 国家计算机科学进展,计算机科学技术学院部署科研工作推进及国家自然科学基金申报工作...
  7. python协成_Python协程技术的演进
  8. 算法—两个有序数组的中位数 Median of Two Sorted Arrays
  9. HDU-2159-FATE(dp)
  10. 如何用anaconda创建python项目_PyCharm+cmd中使用Anaconda 与 新建Python环境(Windows)
  11. LINUX修改权限modify,linux文件权限查看及修改(实用)(View and modify Linux file permissions (practical)).doc...
  12. 除了写代码,还能如何晋升为高级工程师?
  13. maven中引用JDK中的tools jar
  14. 2022年高处安装、维护、拆除理论题库及模拟考试
  15. 常用的高光谱遥感影像数据集(详细介绍+下载链接)
  16. cmake解决opencv编译下载失败的方法
  17. 银联支付服务之公众号支付业务(二)
  18. python查看微信撤回消息怎么弄_微信撤回消息怎么查?Python3步啥都知道了!
  19. HDU 6638 Snowy Smile 线段树+最大子段和
  20. 支付宝网商贷是雪中送炭么?

热门文章

  1. [BZOJ2118] 墨墨的等式(最短路)
  2. controller报错MissingServletRequestParameterException: Required xxx parameter ‘xxx’ is not present
  3. Thinking in Java 9.9 接口与工厂
  4. JS设为首页、添加到收藏夹
  5. 19. Treat class design as type design
  6. 每天一道剑指offer-对称的二叉树
  7. 哪个oracle工具可以免费,Sqlite导入Oracle工具下载官方免费版_SqliteToOracle2.2英文版 - 系统之家...
  8. memcached php封装类,PHP Memcached + APC + 文件缓存封装_PHP - key
  9. javassist组件分享利用javassist动态创建一个类
  10. linux内核中led驱动的分布,Linux内核模块驱动之---led驱动