题目:给定两个字符串 s 和 t ,确定它们是否是同构的。两个字符串是同构的如果 s 中的字符可以被替换得到 t。所有出现的字符必须用另一个字符代替,同时保留字符串的顺序。 没有两个字符可以映射到同一个字符,但一个字符可以映射到自己。
分析:采用hashmap来存放字符串s和字符串t之间的映射关系,同时在遍历s串的同时,利用set来存放字符串t,目的在于每当hashmap中不存在一个字符时,而想要把当前下标的s串和t串放入hashmap中时,判断此时set是否有当前下标的t串,如果存在的话,说明有多对一的映射关系存在,则直接返回false;而如果hashmap中存在当前下标的s串,则判断它的value值是否与当前下标的t串相等,如果不等的话返回false,因为此时不是一对一的映射关系。
public class Solution { /** * @param s: a string * @param t: a string * @return: true if the characters in s can be replaced to get t or false */ public boolean isIsomorphic(String s, String t) { // write your code here if(s.length()<=0 ||t.length()<=0) return false; HashMap<Character,Character> hashMap = new HashMap<>(); Set<Character> set=new HashSet<>(); for(int i=0;i<s.length();i++){ char chars=s.charAt(i); char chart=t.charAt(i); //键未出见过保存映射关系 if(!hashMap.containsKey(chars)){ if(set.contains(chart)){ //存在多对一映射 return false; }else{ hashMap.put(chars,chart); set.add(chart); } }else{ if(hashMap.get(chars)!=chart){ //不是一对一的映射关系 return false; } } } return true; } }