[ LeetCode ] 205 Isomorphic Strings

codesver·2023년 7월 18일
0

LeetCode

목록 보기
24/24
post-thumbnail

📌 Problem

동일한 길이 두 문자열이 주어졌을 때 문자열 s를 문자열 t로 변환할 수 있는지 확인하면 된다. 변환하는 방법은 다음과 같다.

- 동일한 문자들은 동일한 문자로 변환된다. Ex) a는 모두 b로 변환된다.
- 서로 다른 문자는 서로 다른 문자로 변환된다. Ex) a가 b로 변환된다면 다른 문자가 b로 변환될 수 없다.
- 자기 자신으로 변환이 가능하다. Ex) a는 a로 변환이 가능하다.

📌 Solution

Map과 Set을 통해 변환 가능 여부를 확인하면 한 문자씩 변환한다.
문자열 s의 문자들을 하나씩 탐색할 때 다음과 같이 탐색한다.

1. 문자가 Map의 key로 있는지 확인한다.
  - Key로 있다면 이전에 변환한 문자이다. 즉, Map[char] == t[index]이어야 한다.
  - 만약 이전 변환 기록과 변환 타겟 문자가 다르다면 두 문자열은 변환이 불가능하다.
2. Set이 변환 타겟 문자를 가지고 있는지 확인한다.
  - Map에 변환 기록이 없는데 변환 타겟 문자가 이미 Set에 있다면 두 문자열은 변환이 불가능하다.
3. Map과 Set에 변환을 기록한다.

📌 Code

class Solution {
    fun isIsomorphic(s: String, t: String): Boolean {
        val map = mutableMapOf<Char, Char>()
        val set = mutableSetOf<Char>()
        s.forEachIndexed { i, c ->
            if (map.containsKey(c)) {
                if (map[c] != t[i]) return false
            } else if (set.contains(t[i])) return false
            map[c] = t[i]
            set += t[i]
        }
        return true
    }
}
profile
Hello, Devs!

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

글 잘 봤습니다, 감사합니다.

답글 달기