算法萌新闯力扣:同构字符串

    力扣题:同构字符串

开篇

  对于字符串相关的题目,哈希表经常会使用到,这道题更是如此,还用到了两个哈希表。拿下它,你对字符串题目的理解就会更上一层楼。

题目链接:205.同构字符串

题目描述

代码思路

看完题目后,我的理解是要建两个哈希表,一个由s指向t,一个由t指向s,然后循环遍历每对元素,看看与之前的键值对有没有发生冲突,若发生冲突,则返回false

数学理解如下
算法萌新闯力扣:同构字符串_第1张图片

代码纯享版

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
    }
}

结语

  如果这篇文章对你有所帮助,点个关注。我会每天更新力扣题目解析,与大家一起进步。

你可能感兴趣的:(Java算法,算法,leetcode,职场和发展,java,数据结构)