LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)
翻译
给定两个字符串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)(*)相关推荐
- 205 Isomorphic Strings
205 Isomorphic Strings 链接:https://leetcode.com/problems/isomorphic-strings/ 问题描述: Given two strings ...
- leetcode之Isomorphic strings
问题来源:Isomorphic strings 问题描述:给定两个字符串,判断它俩是否满足同构关系.同构关系表示两个字符串的字符能一一对应,例如title和paper构成同构关系,而foo和bar不构 ...
- leetcode python3 简单题205. Isomorphic Strings
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二百零五题 (1)题目 英文: Given two strings s and t ...
- 205. Isomorphic Strings
1,题目要求 Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if th ...
- Easy-题目46:205. Isomorphic Strings
题目原文: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...
- leetcode 205.同构字符串
leetcode 205.同构字符串 题目描述 给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符 ...
- leetcode 205. 同构字符串(hash)
给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一 ...
- LeetCode 1759. 统计同构子字符串的数目
文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 s ,返回 s 中 同构子字符串 的数目. 由于答案可能很大,只需返回对 10^9 + 7 取余 后的结果. 同构字符串 的定义为:如果一 ...
- C++描述 LeetCode 5677. 统计同构子字符串的数目
C++描述 LeetCode 5677. 统计同构子字符串的数目 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写 ...
最新文章
- ICRA 2021 | UPSLAM:联合全景SLAM
- 这篇长达165页的论文,用一个里程碑式的证明同时解决了量子物理学和理论数学的难题...
- Python 学习之中的一个:在Mac OS X下基于Sublime Text搭建开发平台包括numpy,scipy
- java安卓获取mac_android开发分享以编程方式获取Android设备的MAC
- SAP UI5 应用开发教程之五十一 - 如何使用 Chrome 调试运行在手机上的 SAP UI5 Cordova 混合应用试读版
- python包numpy_NumPy Python科学计算软件包的终极指南
- 如何用python生成可执行程序必须经过_python怎么生成可执行文件
- 刀片服务器显示连接线,通过浏览器对刀片服务器进行管理
- linux的工程管理器是,Linux工程管理器——make
- 安装Windows版C / GCC编译器
- 【转载】大型网站性能
- 利用IDEA模板快速生成swagger注解
- 一路向前大数据推荐算法团队
- 小内存堆管理算法详细解析
- JavaBean为什么需要序列化?
- 微信小程序源码案例大全
- 【MATLAB教程案例50】通过VisualSFM工具箱提取360度等间隔环绕拍摄得到的图像序列点云数据,并进行目标三维重建matlab仿真
- 将A1B2C3D4E5F6G7H8拆分开来,并分别存入int[]和String[]数组,得到的结果为[1,2,3,4,5,6,7,8]和[A,B,C,D,E,F,G,H],
- 关于python中的字符串映射转换
- 微软修复打印机服务漏洞 所有支持Windows系统都受影响
热门文章
- java万年历计算法定节假日,java获取中国节假日
- 教育培训行业如何在抖音快速获客、变现?
- 网站推广专员浅析网站排名越来越差大抵离不开这些网站推广重点
- 网站SEO优化中几个不为人知的小细节分享!
- 网站功能页面构建有何技巧?
- java接口是类型吗_JAVA中,接口到底是不是类
- Spark中Task,Partition,RDD、节点数、Executor数、core数目(线程池)、mem数
- 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来...
- Let's Encrypt 免费通配符 SSL 证书申请教程——但是也需要email,域名所有权等,如果是黑产用的话会这样用吗?会不会暴露自己身份???...
- ES Segment Memory——本质上就是segment中加到内存的FST数据,因此segment越多,该内存越大...