1、题目描述
2、题目解析
使用哈希表,互相进行映射。
根据题意, s 和 t 每个位置上的字符是否都一一对应,即 s 的任意一个字符被 t 中唯一的字符对应,同时 t 的任意一个字符被 s 中唯一的字符对应。这也被称为「双射」的关系。
因此使用两个哈希表,互相进行映射,从左至右遍历两个字符串的字符,不断更新两张哈希表,如果出现冲突,则无法构成同构体,返回false.
实现代码如下:
class Solution {
public boolean isIsomorphic(String s, String t) {
if(s.length() != t.length())
return false;
Map<Character,Character> s2t = new HashMap<Character,Character>();
Map<Character,Character> t2s = new HashMap<Character,Character>();
for(int i = 0; i < s.length(); i++){
char sChar = s.charAt(i);
char tChar = t.charAt(i);
if((s2t.containsKey(sChar) && s2t.get(sChar) != tChar)
|| t2s.containsKey(tChar) && t2s.get(tChar) != sChar){
return false;
}else{
//两个哈希表,互相映射上
s2t.put(sChar, tChar);
t2s.put(tChar, sChar);
}
}
return true;
}
}
复杂度分析
时间复杂度:O(n),其中 n 为字符串的长度。我们只需同时遍历一遍字符串 s 和 t 即可。
空间复杂度:O(∣Σ∣),其中 Σ 是字符串的字符集。哈希表存储字符的空间取决于字符串的字符集大小,最坏情况下每个字符均不相同,需要 O(∣Σ∣) 的空间。