1. 程式人生 > >【leetcode】205. 同構字串

【leetcode】205. 同構字串


先判斷這兩個字串長度是否相同,如果不相同,那麼肯定不是同構字串
如果長度相同,再繼續判斷兩個字串是不是完全相等,這是一個小優化(判斷相等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;
    }
}