Two-gram

Kotlin dili ile programcılık becerinizi geliştirmek için örnek problemleri çözmeye devam edilim. Bu yazıda ele alacağımız problem ve kodları aşağıdaki gibidir.

Problem

Two-gram, iki büyük harften oluşan düzenli bir çifttir. Örneğin; “AZ”, “AA” ve “ZA” gibi. Bu üçü birbirinden farklı two-gram çiftleridir. Bu uygulamada n adet büyük harften oluşan s dizesi verilecektir. Göreviniz; s dizesinde bulunan ve en çok tekrar edilen büyük harf çiftini (two-gram) bulmaktır.

Örneğin: s dizesi ” BBAABBBA” şeklinde ise en çok bulunan two-gram dizesi “BB” olur. Çünkü bu dize toplamda 3 kez tekrar etmektedir. “BA” dizesi 2 kez tekrar ettiği için doğru cevap olamaz. Yani özetle amacınız dizede bulunan ve en çok tekrar edilen çift harf dizisini bulup ekrana yazdırmaktır.

Giriş

Kullanıcı ilk satırda n sayısını girer. Bu sayı 2≤n≤100 şartını sağlamalıdır. n sayısı kullanıcının gireceği s dizesinin karakter sayısını belirler. İkinci satırda ise n adet büyük harften meydana gelen s dizesi girilir.

Çıkış

s dizesinde en çok tekrar edilen harf çiftini tek satırda ekranda yazınız.

Örnek

Giriş – 1
7
ABACABA

Çıkış -1
AB

Giriş -2
5
ZZZAA

Çıkış -2
ZZ

NOT:
İlk örnekte “BA” çifti, “AB” çifti kadar tekrar ettiği için cevap olarak “BA” da kabul edilir.
İkinci örnek sadece “ZZ” yazılabilir. Çünkü en fazla tekrar eden çift budur.

fun readLn() = readLine()!!

fun main(args: Array<String>) {
    var n = readLn().toInt()
    var s = readLn()
    var arrSS = mutableSetOf<String>()
    var mutable = mutableMapOf<String, Int>()
    var i: Int = 0

    if (n == s.length) {
        while (i < n - 1) {
            var ss = s[i] + s[++i].toString()
            arrSS.add(ss)
        }
        for (x in arrSS)
            mutable.put(x, 0)
    }
    i = 0
    while (i < n - 1) {
        var ss = s[i] + s[++i].toString()
        var key = mutable.get(ss)!!.toInt()
        mutable.set(ss, ++key)
    }
    i=0
    var ss:String?=null
    var maxNum=0
    for (k in arrSS){
        var j=mutable.get(k)!!.toInt()
        if (maxNum<=j){
            ss=k
            maxNum=j
        }
    }
    println(ss)
}
ABACABA dizesi ekran çıktısı
ZZZAA dizesi ekran çıktısı

Kaynak: https://codeforces.com/contest/1212/problem/B

**Bana en büyük desteğiniz yazılarıma yorum yapmanız ve paylaşmanızdır.