[leetcode] 205. Isomorphic Strings

반응형

문제

 


풀이

주어진 두 문자열이 Isomorphic 이면 true를 반환, 아니면 false를 반환하면 되는 문제

map를 하나 생성해서 두 문자열을 매핑하고 비교하면 된다.

 

하지만 한 가지 주의해야 할 점은 두 문자가 같은 문자에 맵핑될 수 없다는 점이다.

 

즉 아래와 같은 경우는 o가 a와 r에 매핑되므로 false가 반환되어야 한다.

f -> b
o -> a
o -> r

 

아래와 같은 경우 역시  b와 d가 b에 매핑되고 a와 c가 a에 매핑되므로 false가 반환되어야 한다.

b -> b
a -> a
d -> b
c -> a

 

 

s -> t 로 매핑되는 맵과 t -> s 로 매핑되는 맵 2가지를 만들어서 계산하면 위 같은 케이스를 구분할 수 있다.

 

그런데 자바 HashMap에는 값이 있는 지 확인할 수 있는 함수(containsValue())가 있어서 맵 하나만 만들고 해당 함수를 통해서 두 문자가 같은 문자에 매핑되는 지를 확인할 수도 있다.


코드

class Solution {
    public boolean isIsomorphic(String s, String t) {
        var dictionary = new HashMap<Character,Character>();

        for(int i = 0; i<s.length(); i++){
            var sc = s.charAt(i);
            var tc = t.charAt(i);

            if(dictionary.containsKey(sc)){
                if(tc != dictionary.get(sc)){
                    return false;
                }
            } else if(dictionary.containsValue(tc)) {
                return false;
            } else {
                dictionary.put(sc, tc);
            }
        }
        return true;
    }
}

 

 

 


참고