알고리즘

릿코드 1930. Unique Length-3 Palindromic Subsequences 코틀린

rkrkrr0101 2023. 11. 15. 01:56

3글자 고정 회문이니까 
자기부터 뒷라인에 같은글자가 있고,해당글자와 나 사이에 글자가 하나라도 있으면 집합에 넣기


타임아웃

class Solution {
    fun countPalindromicSubsequence(s: String): Int {
        val resSet= mutableSetOf<String>()
        for ((index,char) in s.withIndex()){
            val sliceString=s.slice(index+1 until s.length)
            val sIndex=sliceString.indexOfLast {it==char}
            if (sIndex>0){
                for (sChar in sliceString.slice(0..sIndex-1)){
                    resSet.add(char.toString()+sChar+char)

                }
            }

        }
        return resSet.size
    }
}





정답

class Solution {

    fun countPalindromicSubsequence(s: String): Int {
        val freq = s.groupBy { it }.filterValues { it.size > 1 }
        var count = 0
        for ((l, f) in freq) {

            if (f.size > 2) count++
            val visited = HashSet<Char>()
            for (i in s.indexOf(l)..s.lastIndexOf(l))
                if (s[i] != l && visited.add(s[i])) count++
        }
        return count
    }
}

 

 

 

슬라이스 시간복잡도가 o(n)이니까 o(n^2)였을듯 저거를 바꿔야하는거까진 알겠는데 어떻게바꿔야할지 감이안왔음