题目链接
解题思路
- 维护两张哈希表,第一张表
s2t
以s
中字符为键,映射至t
的字符为值,第二张哈希表t2s
以t
中字符为键,映射至s
的字符为值。 - 从左至右遍历两个字符串的字符,不断更新两张哈希表,如果出现当前下标
index
对应的字符s[index]
已经存在映射且不为t
[index]或当前下标index
对应的字符t[index]
已经存在映射且不为s[index]
时说明两个字符串无法构成同构,返回false
- 如果直到遍历结束都没有出现上述冲突,则表明两个字符串是同构的,返回
true
即可
AC代码
class Solution {
public boolean isIsomorphic(String s, String t) {
Map<Character, Character> s2t = new HashMap<>();
Map<Character, Character> t2s = new HashMap<>();
int len = s.length();
for (int i = 0; i < len; i++) {
char x = s.charAt(i);
char y = t.charAt(i);
if ((s2t.containsKey(x) && s2t.get(x) != y) || (t2s.containsKey(y) && t2s.get(y) != x))
return false;
s2t.put(x, y);
t2s.put(y, x);
}
return true;
}
}
本地测试代码
package com.company;
import java.util.HashMap;
import java.util.Map;
public class Solution_205 {
public static boolean isIsomorphic(String s, String t) {
Map<Character, Character> s2t = new HashMap<>();
Map<Character, Character> t2s = new HashMap<>();
int len = s.length();
for (int i = 0; i < len; i++) {
char x = s.charAt(i);
char y = t.charAt(i);
if ((s2t.containsKey(x) && s2t.get(x) != y) || (t2s.containsKey(y) && t2s.get(y) != x))
return false;
s2t.put(x, y);
t2s.put(y, x);
}
return true;
}
public static void main(String[] args) {
System.out.println(isIsomorphic(new String("egg"), new String("add")));
}
}