All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g3001_3100.s3093_longest_common_suffix_queries.Solution.kt Maven / Gradle / Ivy

package g3001_3100.s3093_longest_common_suffix_queries

// #Hard #Array #String #Trie #2024_04_18_Time_860_ms_(89.29%)_Space_171.4_MB_(67.86%)

class Solution {
    fun stringIndices(wc: Array, wq: Array): IntArray {
        var minLength = wc[0].length
        var minIndex = 0
        val n = wc.size
        val m = wq.size
        for (i in 0 until n) {
            if (minLength > wc[i].length) {
                minLength = wc[i].length
                minIndex = i
            }
        }
        val root = Trie(minIndex)
        for (i in 0 until n) {
            var curr: Trie? = root
            for (j in wc[i].length - 1 downTo 0) {
                val ch = wc[i][j]
                if (curr!!.has(ch)) {
                    val next = curr.get(ch)
                    if (wc[next!!.index].length > wc[i].length) {
                        next.index = i
                    }
                    curr = next
                } else {
                    curr.put(ch, i)
                    curr = curr.get(ch)
                }
            }
        }
        val ans = IntArray(m)
        for (i in 0 until m) {
            var curr: Trie? = root
            for (j in wq[i].length - 1 downTo 0) {
                val ch = wq[i][j]
                if (curr!!.has(ch)) {
                    curr = curr.get(ch)
                } else {
                    break
                }
            }
            ans[i] = curr!!.index
        }
        return ans
    }

    private class Trie(var index: Int) {
        var ch: Array = arrayOfNulls(26)

        fun get(ch: Char): Trie? {
            return this.ch[ch.code - 'a'.code]
        }

        fun has(ch: Char): Boolean {
            return this.ch[ch.code - 'a'.code] != null
        }

        fun put(ch: Char, index: Int) {
            this.ch[ch.code - 'a'.code] = Trie(index)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy