Algorithms/- LeetCode

LeetCode - 205. Isomorphic Strings [Kotlin]

자굿 2022. 9. 7. 01:23
 

Isomorphic Strings - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

정답(Solution)

class Solution {
    fun isIsomorphic(s: String, t: String): Boolean {
        val sKeyMap = HashMap<Char, Char>()
        val tKeyMap = HashMap<Char, Char>()
        
        for(i in s.indices){
            val sValue : Char? = sKeyMap[s[i]]
            when{
                sValue == null && tKeyMap[t[i]] != null -> return false
                sValue == null -> {
                    sKeyMap[s[i]] = t[i]
                    tKeyMap[t[i]] = s[i]
                }
                sValue != t[i] -> return false
            }
        }
        return true
    }
}

 

분석

  • key value 쌍으로 map에 보관하여 동형(Isomorphic)인지 판별하는 문제

 

참고할 만한 정답

class Solution {
    fun isIsomorphic(s: String, t: String): Boolean {
        val map = HashMap<Char, Char>(26)
        val rmap = HashMap<Char, Char>(26)
        
        for(i in 0 until s.length) {
            val tl: Char? = map[s[i]]
            when {
               tl == null && rmap[t[i]] != null -> return false
               tl == null ->  {
                   map[s[i]] = t[i] 
                   rmap[t[i]] = s[i] 
               }
               tl != t[i] -> return false
            }
        }
        return true
    }
}

분석

map.values.contains()를 사용하지 않고 별도의 map으로 관리하여 중복된 t 값이 있는지 t를 key로 하여 바로 찾을 수 있다.

 

초기 정답(Initial Solution)

class Solution {
    fun isIsomorphic(s: String, t: String): Boolean {
        val map = HashMap<Char, Char>()
        for(i in 0 until s.length){
            if(map[s[i]] == null){
                if(map.values.contains(t[i])){
                    return false
                }else{
                    map[s[i]] = t[i]
                }
            }else{
                if(map[s[i]] != t[i]){
                    return false
                }
            }
        }
        return true
    }
}
반응형