문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
두개의 문자열 s와 t가 주어졌을 때, 두 문자열이 동형인지 판별해라.
두 문자열 s와 t가 동형인 것은 s의 문자를 대체하여 t를 얻을 수 있기 때문이다.
모든 문자는 문자 순서를 유지하면서 다른 문자로 대체되어야 한다. 두 문자가 같은 문자에 매핑 될 수는 없지만, 문자는 자기 자신에게 매핑될 수 있다.
#1
Input: s = "egg", t = "add"
Output: true
Explation:
문자열 s와 t는 동일하게 만들 수 있다.
- e와 a 매핑
- g와 d 매핑
#2
Input: s = "foo", t = "bar"
Output: false
Explation:
문자열 s와 t는 o가 a와 r에 둘 다 매핑되어야 해서 동일하게 만들 수 없다.
#3
Input: s = "paper", t = "title"
Output: true
HashMap을 사용해서 문제를 해결했다.
class Solution {
public boolean isIsomorphic(String s, String t) {
HashMap<Character, Character> charMap = new HashMap<>();
for(int i = 0; i < s.length(); i++){
char sc = s.charAt(i);
char tc = t.charAt(i);
if(charMap.containsKey(sc)){
if(charMap.get(sc) != tc) return false;
}else if(charMap.containsValue(tc)){
return false;
}
charMap.put(sc, tc);
}
return true;
}
}
주어진 문자열 s의 길이만큼 순회한다.
순회하면서 i번째에 있는 문자를 가져와서 HashMap에 있는지 확인한다.
있다면 키와 값을 비교해서 false를 반환한다. 조건문을 빠져 나온다면 맵에 추가한다.
반복문을 무사히 빠져나왔다면 true를 반환한다.