给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身
利用hashmap 记录,将s 作为key t作为value 在map存储。 map 中 记录 s 和 t 是一一对应的,如果在后面存储 s-t,出现和map中s-t不对应情况则不是同构的。
public boolean isIsomorphic(String s, String t) {
if(s.length() == 0) return true;
HashMap <Character,Character> map = new HashMap<Character,Character>();
for(int i = 0; i < s.length(); i++) {
char str = s.charAt(i);
char ttr = t.charAt(i);
if(map.containsKey(str) ){ //如果包含 str则进行判断
if( map.get(str) != ttr) // 将map 中 str对应的value 提取 与现在的ttr比较,若不等则返回false。
return false;
}else {
if(map.containsValue(ttr)) { //str - ttr 是一一对应关系,存在ttr则str也存在。同构是不会出现 没有str 却有ttr的情况。列如 s为:ab t为aa。返回false
return false;
}
map.put(str,ttr);
}
}
return true;
}