53 lines
1.7 KiB
Java
53 lines
1.7 KiB
Java
package com.zerroi.leetcode.Three18;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
public class IsIsomorphic {
|
|
public static void main(String[] args) {
|
|
SolutionSecond solutionSecond = new SolutionSecond();
|
|
boolean res = solutionSecond.isIsomorphic("badc", "baba");
|
|
System.out.println("res = " + res);
|
|
}
|
|
}
|
|
|
|
/*给定两个字符串 s 和 t ,判断它们是否是同构的。
|
|
|
|
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
|
|
|
|
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。*/
|
|
class SolutionSecond {
|
|
public boolean isIsomorphic(String s, String t) {
|
|
if (s.length() != t.length()) return false;
|
|
|
|
Map<Character, Character> sToT = new HashMap<>();
|
|
Map<Character, Character> tToS = new HashMap<>();
|
|
|
|
|
|
for (int i = 0; i < s.length(); i++) {
|
|
char charS = s.charAt(i);
|
|
char charT = t.charAt(i);
|
|
|
|
// Check s to t mapping
|
|
if (sToT.containsKey(charS)) {
|
|
if (sToT.get(charS) != charT) {
|
|
return false; // Conflict in mapping
|
|
}
|
|
} else {
|
|
sToT.put(charS, charT);
|
|
}
|
|
|
|
// Check t to s mapping
|
|
if (tToS.containsKey(charT)) {
|
|
if (tToS.get(charT) != charS) {
|
|
return false; // Conflict in mapping
|
|
}
|
|
} else {
|
|
tToS.put(charT, charS);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|