建立s到t以及t到s的哈希映射

遍历两个字符串,当双方都不存在某字符的映射关系时,加入映射;

如果某字符的映射关系在两个映射表中产生冲突,返回false

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param t string字符串
     * @return bool布尔型
     */
    bool isIsomorphic(string s, string t) {
        int n = s.size();
        if (n != t.size()) {
            return false;
        }
        unordered_map<char, char> stot; // s到t的映射
        unordered_map<char, char> ttos; // t到s的映射
        for (int i = 0; i < n; i++) {
            if (stot.count(s[i]) == 0 && ttos.count(t[i]) == 0) {
                stot[s[i]] = t[i];
                ttos[t[i]] = s[i];
            } else if (stot[s[i]] != t[i] || ttos[t[i]] != s[i]) {
                return false;
            }
        }
        return true;
    }
};

时间复杂度:O(n),n为字符串长度,需要遍历一次字符串

空间复杂度:O(n),存储两张哈希表