Задачка 1. Алгоритмическая (String Manipulation)
fun main() {
println(reverseWords("The minimum SDK version your app will support, defined in build.gradle"))
println(reverseWords("The minimum SDK version your app will support, defined in build.gradle"))
}
fun reverseWords(str: String?): String? {
//перевернуть строку
}
Ожидаемый результат:
//gradle.build in defined, support will app your version SDK minimum The
//gradle.build in defined, support will app your version SDK minimum The
Задачка 2. Корутиновая
val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
fun main() {
loadAndShowDatas()
}
fun loadAndShowDatas() {
//отобразить результат без наллов
}
// IO thread
suspend fun loadData1(): String? {
delay(1000L)
return "data 1"
}
// IO thread
suspend fun loadData2(): String? {
delay(1200L)
return "data 2"
}
// UI thread
suspend fun showData(data1: String, data2: String) {
if (coroutineContext[ContinuationInterceptor] != Dispatchers.Main) {
throw IllegalStateException("Invalid dispatcher!")
}
println("Data: $data1, $data2")
}
Задачка 3. Алгоритмическая (String Compression)
// Нужно реализовать такой алгоритм сжатия:
// AAAABBBBCC -> 4A4B2C
// ABCDDDDEEE -> ABC5D3E
// AAAAB
// ^
// counter%ref[A]
// AAA
// A
// Complexety O(n)
fun compress(input: String?): String? {
if (input == null) return null
if (input.length == 0) return input
val sb : StringBuilder = StringBuilder(input[0].toString())
var prevChar = input[0]
var count = 0
for (c in input) {
if (prevChar != c) {
if (count > 1) {
sb.append(count)
}
sb.append(prevChar)
count = 1
prevChar = c
} else {
count++
}
}
if (count > 1){
sb.append(count)
}
sb.append(prevChar)
return sb.toString()
}
Вложения
