解题思路:
1,哈希表,字符串s 和 t 一一对应,令字符串s的字符为 key,遍历s,如果s不存在于hash表中,插入,并领其value为t对应位置的字符;如果s中某字符存在于hash表中,并且其value与t中对应位置的字符不同,则返回false,否则返回true;
2,上述过程要有个逆向的过程,即另建一个hash表,t的字符作为key,s的字符作为value,执行上述相同的逻辑
边界条件:s 和 t 的长度不等
前条件:创建hash表
不变式:遍历s中的字符c,在hash表中寻找c,如不存在,则插入;若存在,在比较value与t[i];
结束条件:发现hash表中存在字符c,其hash值与t中对应的字符不同,返回false;否则返回true
class Solution {
public:
bool isIsomorphic(string s, string t) {
if (s.length() != t.length()){
return false;
}
unordered_map<char, char> hashT;
unordered_map<char, char> hashTReverse;
for (int i = 0; i < s.length(); ++i){
if (hashT.find(s[i]) != hashT.end() && hashT[s[i]] != t[i])
return false;
if (hashTReverse.find(t[i]) != hashTReverse.end() && hashTReverse[t[i]] != s[i])
return false;
hashT[s[i]] = t[i];
hashTReverse[t[i]] = s[i];
}
return true;
}
};