> For the complete documentation index, see [llms.txt](https://wentao-shao.gitbook.io/leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wentao-shao.gitbook.io/leetcode/string/205.isomorphic-strings.md).

# 205.Isomorphic-Strings

## 205. Isomorphic Strings

## 题目地址

<https://leetcode.com/problems/isomorphic-strings/>

## 题目描述

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

Two strings 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

Note:
You may assume both s and t have the same length.
```

## 代码

### Approach #1

Time: O(N) && Space: O(N)

```java
class Solution {
  public boolean isIsomorphic(String s, String t) {
        int[] m1 = new int[256];
    int[] m2 = new int[256];
    int n = s.length();
    for (int i = 0; i < n; i++) {
      if (m1[s[i]] != m2[t[i]]) {
        return false;
      }
      m1[s[i]] = i + 1;
      m2[t[i]] = i + 1;
    }
    return true;
  }
}
```

### Approach #2 HashMap

```java
class Solution {
  public boolean isIsomorphic(String s, String t) {
    if (s == null || s.length() <= 1)        return true;
    HashMap<Character, Character> map = new HashMap<Character, Character>();
    for (int i = 0; i < s.length(); i++) {
      char a = s.charAt(i);
      char b = t.charAt(i);
      if (map.containsKey(a)) {
        if (map.get(a).equals(b)) {
          continue;
        } else {
          return false;
        }
      } else {
        if (!map.containsValue(b)) {
          map.put(a, b);
        } else {
          return false;
        }
      }
    }
    return true;
  }
}
```
