给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s = "egg", t = "add" 输出: true
示例 2:
输入: s = "foo", t = "bar" 输出: false
示例 3:
输入: s = "paper", t = "title" 输出: true
说明:
你可以假设 s 和 t 具有相同的长度。
思路:我们要保存s中的字符到t中字符的映射,可以使用HashMap来存放映射关系,需要两个map才能确定他们之间的关系为一 一映射的关系,如果只使用一个map,遇到s="ad",t="aa"时就会出错,这就像数据库中的一对一的关系,所以使用两个map,一个为s到t,一个为t到s。
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
System.out.println(isIsomorphic("aa","aa"));
}
public static boolean isIsomorphic(String s, String t) {
if(s.length()!=t.length()){
return false;
}
HashMap<Character,Character> map=new HashMap();
HashMap<Character,Character> map1=new HashMap();
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
//将c1中的字符串对应带c2中
for (int i = 0; i < c1.length; i++) {
Character ValueT = map.put(c1[i], c2[i]);//如果存放后返回null,则说明c1[i]没有对应值,可以放入,
Character ValueS = map1.put(c2[i], c1[i]);
if(ValueT!=null && ValueT!=c2[i]){
return false;
}
if(ValueS!=null && ValueS!=c1[i]){
return false;
}
}
return true;
}
}