力扣题:同构字符串
开篇
对于字符串相关的题目,哈希表经常会使用到,这道题更是如此,还用到了两个哈希表。拿下它,你对字符串题目的理解就会更上一层楼。
题目链接: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->sMap<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,不指向则返回falseif(map1.get(a) != b ) return false;}else map1.put(a, b); //若哈希表中没有a,则把这对a->b放入if( map2.containsKey(b) ){ //同理,若哈希表中有b,判断之前的b是否指向a,不指向则返回falseif(map2.get(b) != a ) return false;}else map2.put(b, a);//若哈希表中没有b,则把这对b->a放入}return true; //整个循环没有返回false,则返回true}
}
结语
如果这篇文章对你有所帮助,点个关注。我会每天更新力扣题目解析,与大家一起进步。