给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入:s = "egg", t = "add" 输出:true
示例 2:
输入:s = "foo", t = "bar" 输出:false
方法:
HashMap
不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上
代码:
// 205. 同构字符串
static void test_205() {
String s = "egg";
//String t = "add";
String t = "ads";
// 不同字符不能映射到同一个字符上
//String s = "badc";
//String t = "baba";
boolean ret = isIsomorphic(s, t);
System.out.println("ret:" + ret);
}
static boolean isIsomorphic(String s, String t) {
HashMap<Character, Character> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
if (!map.containsKey(s.charAt(i))) {
// 不同字符不能映射到同一个字符上
for (Character c : map.values()) {
if (c.equals(t.charAt(i))) {
return false;
}
}
map.put(s.charAt(i), t.charAt(i));
} else {
// 相同字符只能映射到同一个字符上
if (map.get(s.charAt(i)) != t.charAt(i)) {
return false;
}
}
}
return true;
}