同构字符串

给定两个字符串 st,判断它们是否是同构的。

如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。

所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

示例 1:

1
2
输入: s = "egg", t = "add"
输出: true

示例 2:

1
2
输入: s = "foo", t = "bar"
输出: false

示例 3:

1
2
输入: s = "paper", t = "title"
输出: true

说明:
你可以假设 st 具有相同的长度。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean isIsomorphic(String s, String t) {
if (s.length() == 0) return true;

char[] chars1 = s.toCharArray();
char[] chars2 = t.toCharArray();

int i = 0;
while (i < s.length()) {
//找到对应字符的索引,如果在字符串中出现了与之前相同的字符,则找第一个的索引即可
if (s.indexOf(chars1[i]) != t.indexOf(chars2[i])) return false;
i++;
}
return true;
}

说明

  1. eggadd

    | 字符 | 索引比较 | 结果 |
    | :——-: | :——: | :–: |
    | e : a | 0:0 | true |
    | g : d | 1:1 | true |
    | g: d | 1:1 | true |
    | egg : add | - | true |

  2. foobar

    | 字符 | 索引比较 | 结果 |
    | :——-: | :——: | :—: |
    | f : b | 0 : 0 | true |
    | o : a | 1 : 1 | true |
    | o : r | 1 : 2 | false |
    | foo : bar | - | false |

  3. papertitle

    | 字符 | 索引比较 | 结果 |
    | :———–: | :——: | :–: |
    | p : t | 0 : 0 | true |
    | a : i | 1 : 1 | true |
    | p : t | 0 : 0 | true |
    | e : l | 3 : 3 | true |
    | r : e | 4 : 4 | true |
    | paper : title | - | true |