先判断这两个字符串长度是否相同,如果不相同,那么肯定不是同构字符串
如果长度相同,再继续判断两个字符串是不是完全相等,这是一个小优化(判断相等O(n) < O(nlogn))
使用两个map容器分别存储两个字符串的值,遍历两个容器,如果两个字符都是第一次插入,那么返回值均为NULL
如果是同构,那么返回的是上次插入相同值的位置,这个位置应该要一样
这是一种很巧妙的方法,利用的map容器的特性:插入不存在的值,返回空,插入已存在的值,返回被覆盖的那个VALUE值,这里返回的就是数值位置
时间复杂度:O(nlogn)
空间复杂度:O(n)
class Solution {
public boolean isIsomorphic(String s, String t) {
if(s.length() != t.length())
return false;
if(s.equals(t))
return true;
Map index_s = new HashMap();
Map index_t = new HashMap();
for(Integer i = 0; i < s.length(); i++){
if(index_s.put(s.charAt(i), i) != index_t.put(t.charAt(i), i))
return false;
}
return true;
}
}