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 sToT = new HashMap<>(); Map 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; } }