翻译

给定两个字符串s和t,决定它们是否是同构的。假设s中的元素被替换能够得到t,那么称这两个字符串是同构的。在用一个字符串的元素替换还有一个字符串的元素的过程中。所有字符的顺序必须保留。

没有两个字符能够被映射到同样的字符,但字符能够映射到该字符本身。 比如, 给定“egg”,“add”,返回真。 给定“foo”。“bar”,返回假。 给定“paper”,“title”,返回真。

批注: 你能够假设s和t有同样的长度。

原文

Given two strings s and t, determine if they are isomorphic.Two strings are isomorphic if the characters in s can be replaced to get t.All occurrences of a character must be replaced with another character while preserving the order of characters.
No two characters may map to the same character but a character may map to itself.For example,
Given "egg", "add", return true.Given "foo", "bar", return false.Given "paper", "title", return true.Note:
You may assume both s and t have the same length.

分析

翻译完这题目就非常自然的想到一个方法,我希望将字符串所有输出成数字序列:

For example,Given "paper", return "01023".Given "foo", return "011".Given "isomorphic", return "0123245607".

于是就将这个功能给实现了:

vector<int> getVecOrder(string str) {map<char, int> strM;int index = 0;vector<int> strVec;for (int i = 0; i < str.size(); ++i) {auto iter = strM.find(str[i]);if (iter == strM.end()) {strM.insert(pair<char, int>(str[i], index));strVec.push_back(index);index += 1;}else {strVec.push_back(strM[str[i]]);}}return strVec;
}

这里用map来保存每一个字符和索引的键值对,索引用index来表示。索引从0開始。

最后的数字序列用vector来保存。

循环遍历整个字符串,每次在map中寻找一个字符,假设没有找到,则将其和相应的index加入进去,假设已经存在,就将该字符的索引从map中获取出来并加入到vector中。

有了这个模块函数,解起题来就轻而易举咯:

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

由于字符串的长度题目说了是等长的,所以vector的长度肯定也是相等的了。

updated at 2016/09/05

同理,也能够改成例如以下所看到的的 Java 代码~

    private ArrayList getArrayOrder(String str) {HashMap<Character, Integer> strM = new HashMap<>();int index = 0;ArrayList order = new ArrayList(str.length());for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (strM.containsKey(c)) {order.add(strM.get(c));} else {strM.put(c, index);order.add(index);index += 1;}}return order;}public boolean isIsomorphic(String s, String t) {if (s.length() != t.length())return false;ArrayList s0 = getArrayOrder(s), t0 = getArrayOrder(t);for (int i = 0; i < s0.size(); i++)if (s0.get(i) != t0.get(i))return false;return true;}

代码

class Solution {
public:vector<int> getVecOrder(string str) {int len = str.size();map<char, int> strM;int index = 0;vector<int> strVec;for (int i = 0; i < len; ++i) {auto iter = strM.find(str[i]);if (iter == strM.end()) {strM.insert(pair<char, int>(str[i], index));strVec.push_back(index);index += 1;}else {strVec.push_back(strM[str[i]]);}}return strVec;}bool isIsomorphic(string s, string t) {vector<int> v_s = getVecOrder(s), v_t = getVecOrder(t);for (int i = 0; i < v_s.size(); ++i) {if (v_s[i] != v_t[i]) return false;}return true;}
};

转载于:https://www.cnblogs.com/gccbuaa/p/7223838.html

LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)相关推荐

  1. 205 Isomorphic Strings

    205 Isomorphic Strings 链接:https://leetcode.com/problems/isomorphic-strings/ 问题描述: Given two strings ...

  2. leetcode之Isomorphic strings

    问题来源:Isomorphic strings 问题描述:给定两个字符串,判断它俩是否满足同构关系.同构关系表示两个字符串的字符能一一对应,例如title和paper构成同构关系,而foo和bar不构 ...

  3. leetcode python3 简单题205. Isomorphic Strings

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百零五题 (1)题目 英文: Given two strings s and t ...

  4. 205. Isomorphic Strings

    1,题目要求 Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if th ...

  5. Easy-题目46:205. Isomorphic Strings

    题目原文: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...

  6. leetcode 205.同构字符串

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

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

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

  8. LeetCode 1759. 统计同构子字符串的数目

    文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 s ,返回 s 中 同构子字符串 的数目. 由于答案可能很大,只需返回对 10^9 + 7 取余 后的结果. 同构字符串 的定义为:如果一 ...

  9. C++描述 LeetCode 5677. 统计同构子字符串的数目

    C++描述 LeetCode 5677. 统计同构子字符串的数目   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写 ...

最新文章

  1. ICRA 2021 | UPSLAM:联合全景SLAM
  2. 这篇长达165页的论文,用一个里程碑式的证明同时解决了量子物理学和理论数学的难题...
  3. Python 学习之中的一个:在Mac OS X下基于Sublime Text搭建开发平台包括numpy,scipy
  4. java安卓获取mac_android开发分享以编程方式获取Android设备的MAC
  5. SAP UI5 应用开发教程之五十一 - 如何使用 Chrome 调试运行在手机上的 SAP UI5 Cordova 混合应用试读版
  6. python包numpy_NumPy Python科学计算软件包的终极指南
  7. 如何用python生成可执行程序必须经过_python怎么生成可执行文件
  8. 刀片服务器显示连接线,通过浏览器对刀片服务器进行管理
  9. linux的工程管理器是,Linux工程管理器——make
  10. 安装Windows版C / GCC编译器
  11. 【转载】大型网站性能
  12. 利用IDEA模板快速生成swagger注解
  13. 一路向前大数据推荐算法团队
  14. 小内存堆管理算法详细解析
  15. JavaBean为什么需要序列化?
  16. 微信小程序源码案例大全
  17. 【MATLAB教程案例50】通过VisualSFM工具箱提取360度等间隔环绕拍摄得到的图像序列点云数据,并进行目标三维重建matlab仿真
  18. 将A1B2C3D4E5F6G7H8拆分开来,并分别存入int[]和String[]数组,得到的结果为[1,2,3,4,5,6,7,8]和[A,B,C,D,E,F,G,H],
  19. 关于python中的字符串映射转换
  20. 微软修复打印机服务漏洞 所有支持Windows系统都受影响

热门文章

  1. java万年历计算法定节假日,java获取中国节假日
  2. 教育培训行业如何在抖音快速获客、变现?
  3. 网站推广专员浅析网站排名越来越差大抵离不开这些网站推广重点
  4. 网站SEO优化中几个不为人知的小细节分享!
  5. 网站功能页面构建有何技巧?
  6. java接口是类型吗_JAVA中,接口到底是不是类
  7. Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数
  8. 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来...
  9. Let's Encrypt 免费通配符 SSL 证书申请教程——但是也需要email,域名所有权等,如果是黑产用的话会这样用吗?会不会暴露自己身份???...
  10. ES Segment Memory——本质上就是segment中加到内存的FST数据,因此segment越多,该内存越大...