# 205. Isomorphic Strings

{% hint style="info" %}
同构字符串，意思就是字符串s里的字符与t里的字符一一对应。例如：

"ab" -> "ac"  -- **True**;&#x20;

"ab" -> "ca" -- **True**;

&#x20;"ab" -> "aa" --> **False**.

简单来说，就是 `s->t` 唯一性，`t->s` 也要唯一性。
{% endhint %}

{% tabs %}
{% tab title="C++" %}

```cpp
class Solution {
public:
    bool isIsomorphic(string s, string t) {
        return sT(s, t) && sT(t, s);
    }
    
    bool sT(string s, string t) {
        unordered_map<char, char> m;
        for(int i = 0; i < s.length(); i ++) {
            if(m.count(s[i]) == 0) {
                m[s[i]] = t[i];
            } else {
                if(m[s[i]] != t[i]) return false;
            }
        }
        return true;        
    }
};
```

{% endtab %}
{% endtabs %}

> 在C++中，unordered\_map 与 map 的区别：
>
> map 用红黑树存储数据，自动排序，插入删除的操作时会比较省时间，但是对空间的耗费比较大，因为需要记录子节点和父节点。
>
> unordered\_map 用哈希表存储，无序，查找比较省时，总体来说很省空间，但插入删除操作会比较费时。
