## 205. Isomorphic Strings

Given two strings `s` and `t`, determine if they are isomorphic.

Two strings `s` and `t` are isomorphic if the characters in `s` can be replaced to get `t`.

All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character, but a character may map to itself.

Example 1:

```Input: s = "egg", t = "add"
Output: true
```

Example 2:

```Input: s = "foo", t = "bar"
Output: false
```

Example 3:

```Input: s = "paper", t = "title"
Output: true
```

Constraints:

• `1 <= s.length <= 5 * 104`
• `t.length == s.length`
• `s` and `t` consist of any valid ascii character.

## Rust Solution

``````struct Solution;

use std::collections::HashMap;

impl Solution {
fn is_isomorphic(s: String, t: String) -> bool {
let mut hmst: HashMap<char, char> = HashMap::new();
let mut hmts: HashMap<char, char> = HashMap::new();
let mut is = s.chars();
let mut it = t.chars();
while let (Some(cs), Some(ct)) = (is.next(), it.next()) {
if let Some(&vt) = hmst.get(&cs) {
if vt != ct {
return false;
}
} else {
hmst.insert(cs, ct);
}
if let Some(&vs) = hmts.get(&ct) {
if vs != cs {
return false;
}
} else {
hmts.insert(ct, cs);
}
}
true
}
}

#[test]
fn test() {
let s = "egg".to_string();