https://coderun.yandex.ru/problem/couple-of-letters/description Легкая

Условие

Имеется текст, состоящий из заглавных латинских символов и пробелов, длиной не более 255 символов. Словом в тексте называется последовательность букв, ограниченная пробелами, началом или концом строки. Пара соседних слов разделена хотя бы одним пробелом.

Найдите такую пару латинских символов, которая чаще всего встречается в тексте в качестве подстроки. Например, «LL» является подстрокой в тексте «HELLO», а «HO» — нет.

Гарантируется, что в тексте есть хотя бы одно слово из 2 и более букв.

Примеры

Ввод: ABCABC A Вывод: BC

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main(args: Array<String>) {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    // Читаем входную строку
    val text = reader.readLine()
    
    // Карта для подсчёта частоты пар
    val pairCount = mutableMapOf<String, Int>()
    
    // Разбиваем текст на слова
    val words = text.split("\\\\s+".toRegex())
    
    // Считаем все пары в каждом слове
    for (word in words) {
        if (word.length < 2) continue
        for (i in 0 until word.length - 1) {
            val pair = word.substring(i, i + 2)
            pairCount[pair] = pairCount.getOrDefault(pair, 0) + 1
        }
    }
    
    // Находим пару с максимальной частотой
    var maxCount = 0
    var result = ""
    
    for ((pair, count) in pairCount) {
        if (count > maxCount || (count == maxCount && pair > result)) {
            maxCount = count
            result = pair
        }
    }
    
    writer.write(result)
    writer.newLine()

    reader.close()
    writer.close()
}