力扣题:同构字符串
开篇
对于字符串相关的题目,哈希表经常会使用到,这道题更是如此,还用到了两个哈希表。拿下它,你对字符串题目的理解就会更上一层楼。
题目链接:205.同构字符串
题目描述
 
代码思路
看完题目后,我的理解是要建两个哈希表,一个由s指向t,一个由t指向s,然后循环遍历每对元素,看看与之前的键值对有没有发生冲突,若发生冲突,则返回false
数学理解如下
 
代码纯享版
class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map<Character, Character> map1 = new HashMap<>();
        Map<Character, Character> map2 = new HashMap<>();
        int len = s.length();
        for(int i = 0; i < len; i++){
            char a = s.charAt(i);
            char b = t.charAt(i);
            if( map1.containsKey(a) ){
                if(map1.get(a) != b ) return false;
            }
            else  map1.put(a, b);
            if( map2.containsKey(b) ){
                if(map2.get(b) != a ) return false;
            }
            else map2.put(b, a);
        }
        return true;
    }
}
代码逐行解析版
class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map<Character, Character> map1 = new HashMap<>(); //创建两个哈希表,map1由s->t,map2由t->s
        Map<Character, Character> map2 = new HashMap<>();
        int len = s.length(); 
        for(int i = 0; i < len; i++){
            char a = s.charAt(i); //a为s的字符,b为t的字符
            char b = t.charAt(i);
            if( map1.containsKey(a) ){ //若哈希表中有a,判断之前的a是否指向b,不指向则返回false
                if(map1.get(a) != b ) return false;
            }
            else  map1.put(a, b); //若哈希表中没有a,则把这对a->b放入
            if( map2.containsKey(b) ){ //同理,若哈希表中有b,判断之前的b是否指向a,不指向则返回false
                if(map2.get(b) != a ) return false;
            }
            else map2.put(b, a);//若哈希表中没有b,则把这对b->a放入
        }
        return true; //整个循环没有返回false,则返回true
    }
}
结语
如果这篇文章对你有所帮助,点个关注。我会每天更新力扣题目解析,与大家一起进步。

















