给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s = "egg", t = "add"
输出: true
示例 2:
输入: s = "foo", t = "bar"
输出: false
示例 3:
输入: s = "paper", t = "title"
输出: true
说明:
你可以假设 s 和 t 具有相同的长度。
错误思维:两个散列表记录各自字符出现次数并比较。只保证两者每个字符的出现次数,没有保证出现顺序。
class Solution { public boolean isIsomorphic(String s, String t) { Map<Character,Integer> map1 = new LinkedHashMap<>(); Map<Character,Integer> map2 = new LinkedHashMap<>(); for(int i=0; i<s.length(); i++) map1.put(s.charAt(i),map1.getOrDefault(s.charAt(i),0)+1); for(int i=0; i<t.length(); i++) map2.put(t.charAt(i),map2.getOrDefault(t.charAt(i),0)+1); Iterator i1 = map1.values().iterator(); Iterator i2 = map2.values().iterator(); while(i1.hasNext()){ if(i1.next()!=i2.next()) return false; } return true; } }
方法一:同构需要同时保证s映射到t和t映射到s。