1、自己写的,想的复杂了,也知道肯定有更好的办法,想不出来
class Solution {
public:
bool isIsomorphic(string s, string t) {
int index1 = 0, index2 = 0;
int now1, now2;
unordered_map<char, int> hashtable1, hashtable2;
for(int i=0; i<s.size(); i++){
auto it1 = hashtable1.find(s[i]);
auto it2 = hashtable2.find(t[i]);
if(it1 != hashtable1.end()){// 出现过
now1 = it1->second;// 找到之前插入的数
}else{// 没出现过
hashtable1[s[i]] = index1;// 插入新数
now1 = index1;
index1++;
}
if(it2 != hashtable2.end()){// 出现过
now2 = it2->second;// 找到之前插入的数
}else{// 没出现过
hashtable2[t[i]] = index2;// 插入新数
now2 = index2;
index2++;
}
cout << now1 << " " << now2 << endl;
if(now1 != now2){
return false;
}
}
return true;
}
};
2、官方的喵啊
class Solution {
public:
bool isIsomorphic(string s, string t) {
unordered_map<char, char> s2t;
unordered_map<char, char> t2s;
int len = s.length();
for (int i = 0; i < len; ++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;
}
};