I am learning Scala and I wrote a algorithm to generate the next palindrome, but I got a TLE.
Could anyone help me?
import scala.io.Source
object Main {
def main(args: Array[String]): Unit = {
val reader = Source.fromInputStream(System.in).bufferedReader()
(1 to reader.readLine().toInt).foreach(_ -> deal(reader.readLine()))
}
def deal(s: String): Unit = {
if (s.indexWhere(_ != '9') == -1) {
println((BigInt(s)+2).toString())
}
else if (s.length == 1) {
println((s.charAt(0).toInt + 1).toChar)
}
else {
if (s.length % 2 == 0) {
val le = BigInt(s.take(s.length / 2))
val ri = BigInt(s.takeRight(s.length / 2).reverse)
val ansLe = if (le <= ri) (le + 1).toString() else le.toString()
println(ansLe + ansLe.reverse)
}
else {
val le = BigInt(s.take((s.length-1) / 2))
val ri = BigInt(s.takeRight((s.length-1) / 2).reverse)
val d = s.charAt(s.length / 2)
val ansLe = if (le <= ri && d == '9') (le + 1).toString() else le.toString()
val ansD = if (le > ri || d == '9') '0' else (d.toInt + 1).toChar
println(ansLe + ansD + ansLe.reverse)
}
}
}
}