[LeetCode]1657. Determine if Two Strings Are Close(Kotlin)

0

LeetCode

목록 보기
51/58
post-thumbnail

[LeetCode]1657. Determine if Two Strings Are Close(Kotlin)

풀이1

  • Operation 1,2를 적용하여 두 개의 문자열을 같게 만들 수 있다면 true, 없다면 false를 반환하는 문제
    • 주어지는 두 개의 문자열을 알파벳 소문자로만 이루어짐
    • Operation을 적용할 수 있는 횟수 제한 X
  • Operation1: 문자열에 있는 2개의 문자를 swap할 수 있음
    -> 문자열에 나타나는 문자 순서가 달라도
    -> 두 문자열을 같게 만들 수 있음
  • Operation2: 문자열에 존재하는 알파벳을 문자열에 존재하는 다른 알파벳으로 교체할 수 있음
    -> 두 문자열에서 각 알파벳이 나타나는 횟수가 달라도,
    두 문자열이 같은 알파벳 종류를 가지고 있고, 한 종류의 알파벳이 나타나는 횟수가 같다면
    -> 두 문자열을 같게 만들 수 있음
class Solution {
    fun closeStrings(word1: String, word2: String): Boolean = 
        wordToListPair(word1) == wordToListPair(word2)

    private fun wordToListPair(word:String):Pair<List<Char>, List<Int>>{
        val alphaMap = mutableMapOf<Char, Int>()
        word.forEach{ ch ->
            if(alphaMap.containsKey(ch)) alphaMap[ch] = alphaMap[ch]!! + 1
            else alphaMap[ch] = 1 
        }

        val charList = mutableListOf<Char>() // word에 포함된 알파벳들의 목록
        val charCntList = mutableListOf<Int>() // word에 포함된 알파벳들의 개수 목록
        alphaMap.forEach{ entry ->
            if(entry.value > 0){
                charList.add(entry.key)
                charCntList.add(entry.value)
            }
        }
        return Pair(charList.sorted().toList(), charCntList.sorted().toList())
    }
}

풀이2

  • Kotlin Collection 함수를 이용한 풀이
class Solution {
    fun closeStrings(word1: String, word2: String): Boolean = 
        wordToListPair(word1) == wordToListPair(word2)

    private fun wordToListPair(word:String):Pair<List<Char>, List<Int>>{
        // word에 포함된 알파벳들의 목록
        val charList = word.toSet().toList()
        // word에 포함된 알파벳들의 개수 목록
        val charCntList = word.groupBy{it}.map{it.value.size}
        return Pair(charList.sorted(), charCntList.sorted())
    }
}
profile
Be able to be vulnerable, in search of truth

0개의 댓글