Leetcode205 同构字符串
2016-02-04 15:16
411 查看
题意:给定两个字符串s和t,求这两个字符串是否满足同构性。即一个字符的所有出现 都能用另一个字符代替,并且顺序不能改变。
Given
return true.
Given
return false.
Given
return true.
思路:用两个哈希map<int,vector<int>>分别存储s和t中的每个字符和其出现的序号,然后找出那些有重复出现的字符,将其对应的序号都放进一个vec<vector<int>>中去,然后在新的vec里,找对应的同构字符串中和序号对应的字符是否都相等。
代码:
Given
"egg",
"add",
return true.
Given
"foo",
"bar",
return false.
Given
"paper",
"title",
return true.
思路:用两个哈希map<int,vector<int>>分别存储s和t中的每个字符和其出现的序号,然后找出那些有重复出现的字符,将其对应的序号都放进一个vec<vector<int>>中去,然后在新的vec里,找对应的同构字符串中和序号对应的字符是否都相等。
代码:
class Solution { public: bool isIsomorphic(string s, string t) { int len1 = s.length(), len2 = t.length(); if (len1 != len2) { return 0; } int i = 0,j=0; unordered_map<int, vector<int>> map1,map2; for (i = 0; i < len1;i++){ map1[s[i] - ' '].push_back(i); map2[t[i] - ' '].push_back(i); } vector<vector<int>> vec1,vec2; for (auto x = map1.begin(); x != map1.end();x++){ if (x->second.size()>1) vec1.push_back(x->second); } for (auto y = map2.begin(); y != map2.end(); y++){ if (y->second.size()>1) vec2.push_back(y->second); } for (i = 0; i < vec1.size(); i++){ for(j = 1; j < vec1[i].size(); j++){ if (t[vec1[i][j]] != t[vec1[i][j - 1]]){ return 0; } } } for (i = 0; i < vec2.size(); i++){ for (j = 1; j < vec2[i].size(); j++){ if (s[vec2[i][j]] != s[vec2[i][j - 1]]){ return 0; } } } return 1; } };
相关文章推荐
- OAuth的机制原理讲解及开发流程
- Yii2 如何更好的在页面注入JavaScript
- Fibonacci数列
- linux shell 编程 12 特殊符号 “&” 以及和他的恩怨
- Not-So-Secret Java Agents - Part 1
- 解决HTML5手机端字体小的问题。
- 仅5步搞定Android开发环境部署 Android开发环境搭建教程
- Codevs_P2048 数据结构 2(SplayTree区间翻转)
- 关于微信等业务识别的情况浅析
- ionic平台下的Android极光推送集成文档
- 分解素因数 2
- 创建模态对话框和非模态对话框的方法
- cglib动态生成class文件以及方法区溢出
- 高精度 A+B Problem
- Android 布局 屏幕适配
- 分段机制
- 【EASY ANDROID】转移到gitbook
- 设计模式之六大原则
- BZOJ3230: 相似子串
- Maven--(一个坑)在settings.xml文件中添加mirrors导致无法新建Maven项目