본문 바로가기
LeetCode/Array & Hashing

[LeetCode][Kotlin] 205. Isomorphic Strings

by jinwo_o 2024. 10. 18.

205. Isomorphic Strings

Given two strings s and t, determine if they are isomorphic.

 

Two strings s and t are isomorphic if the characters in s can be replaced to get t.

 

All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character, but a character may map to itself.

두 개의 문자열 s와 t가 주어지면 두 문자열이 동형인지 확인합니다. 

s의 문자를 대체하여 t를 얻을 수 있으면 두 문자열 s와 t는 동형입니다. 

문자의 순서를 유지하면서 모든 문자를 다른 문자로 바꿔야 합니다. 두 문자가 동일한 문자에 매핑될 수는 없지만 문자는 자체에 매핑될 수 있습니다.

 

Example 1:

Input: s = "egg", t = "add"

Output: true

Explanation:

The strings s and t can be made identical by:

  • Mapping 'e' to 'a'.
  • Mapping 'g' to 'd'.

Example 2:

Input: s = "foo", t = "bar"

Output: false

Explanation:

The strings s and t can not be made identical as 'o' needs to be mapped to both 'a' and 'r'.

 

Example 3:

Input: s = "paper", t = "title"

Output: true

 

Constraints:

  • 1 <= s.length <= 5 * 104
  • t.length == s.length
  • s and t consist of any valid ascii character.

코드 1

class Solution {
    fun isIsomorphic(s: String, t: String): Boolean {
        // if (s.length != t.length) return false

        val mapS = HashMap<Char, Char>()
        val mapT = HashMap<Char, Char>()

        for (i in s.indices) {
            if ((s[i] in mapS && mapS[s[i]] != t[i]) ||
                (t[i] in mapT && mapT[t[i]] != s[i])
            ) {
                return false
            }

            mapS[s[i]] = t[i]
            mapT[t[i]] = s[i]
        }
        return true
    }
}

 

코드 2

class Solution {
    fun isIsomorphic(s: String, t: String): Boolean {
        // if (s.length != t.length) return false

        val hm = HashMap<Char, Char>()

        for (i in s.indices) {
            if (s[i] !in hm.keys) {
                if (t[i] in hm.values) return false
                hm[s[i]] = t[i]
            } else if (hm[s[i]] != t[i]) {
                return false
            }
        }

        return true
    }
}