给定两个字符串 s
和 t
,判断它们是否是同构的。
如果 s
中的字符可以按某种映射关系替换得到 t
,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
c++解法
- class Solution {
- public:
- bool isIsomorphic(string s, string t) {
- unordered_map<char, char> s2t;
- unordered_map<char, char> t2s;
- int len1 = t.length();
- int len2 = s.length();
- if(s.size()!=t.size()){
- return false;
- }
-
-
- for (int i = 0; i < len2; ++i) {
- char x = s[i], y = t[i];
- if ((s2t.count(x) && s2t[x] != y) || (t2s.count(y) && t2s[y] != x)) {
- return false;
- }
- s2t[x] = y;
- t2s[y] = x;
- }
- return true;
- }
- };
本题要求同构字符串,利用哈希表将每个出现的字符填入哈希表中,比较两个子串是否具有相同规律,若无法匹配则输出false,若遍历完字符后完全匹配则返回true,题目给出unicode编码测试会得到空指针c++无法判断出正确答案
本题考察哈希表的应用,利用哈希表将每个子串规律记录并判断是否匹配,最后返回答案即可