205. Isomorphic Strings

Easy
自己做的,但很慢,代码也不简洁Time:O(N) Space:O(N)
注意一下像hashSet这种collection比较是否相等可以直接用equals方法。

class Solution {
    public boolean isIsomorphic(String s, String t) {
        char[] source = s.toCharArray();
        char[] target = t.toCharArray();
        Map> map = new HashMap<>();
        for (int i = 0; i < source.length; i++){
            char c = source[i];
            if (!map.containsKey(c)){
                map.put(c, new HashSet(Arrays.asList(target[i])));
            } else {
                map.get(c).add(target[i]);
            }
        }
        Set> values = new HashSet<>();
        for (HashSet value : map.values()){
            values.add(value);
            if (value.size() > 1){
                return false;
            }
        }
        if (values.size() != map.values().size()){
            return false;
        }
        return true;
    }
}

But, 我觉得这种easy题的目的最终是让你做一个O(1) Space的方法或者至少代码简介明了:
差距呀……

class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map map = new HashMap<>();
        for (int i = 0; i < s.length(); i++){
            char c1 = s.charAt(i);
            char c2 = t.charAt(i);
            if (map.containsKey(c1)){
                if (map.get(c1) != c2){
                    return false;
                }
            } else {
                if (map.containsValue(c2)){
                    return false;
                }
                map.put(c1, c2);
            }
        }
        return true;
    }
}

你可能感兴趣的:(205. Isomorphic Strings)