Fork me on GitHub

简单-205-同构字符串

给定两个字符串 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。

posted @ 2020-06-14 14:32  Faded828x  阅读(100)  评论(0编辑  收藏  举报