반응형
문제
풀이
주어진 두 문자열이 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;
}
}
참고
반응형