Soru
Programcıya rastgele harflerden oluşan bir yazi (yazi) veriliyor. Daha sonra, yazıdan arka arkaya en çok tekrar eden harf ve bunun sayısının belirlenmesi isteniyor. Eğer aynı sayıda tekrar yapan birden fazla harf varsa, alfabetik olarak ilk olanı sonuç olarak yazdırması bekleniyor.
Örnek
Girdi | Çıktı |
---|---|
girilenCumle: aazzdddd | Sonuç: [d, 4] |
girilenCumle: teeeeeeemttttto | Sonuç: [e, 7] |
Çözüm - C#
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
public static void Main()
{
string yazi = "ykkkkaada";
// Boşluk kontrolü yap
if (string.IsNullOrEmpty(yazi))
Console.WriteLine(new Tuple<char?, int>(null, 0));
// Tüm harfleri diziye aktar
char[] harfler = yazi.ToCharArray();
Dictionary<int, int> sonuc = new Dictionary<int, int>();
// Her bir harfin durumuna bak
int sayac = 1;
for (int i = 0; i < harfler.Length; i++)
{
if (i + 1 == harfler.Length)
break;
// Harf daha önce diziye dahil edildi ise tekrar sayısını güncelle
if (harfler[i] == harfler[i + 1])
{
sayac++;
sonuc[harfler[i]] = sayac;
}
else
{
sonuc[harfler[i]] = sayac;
sayac = 1;
}
}
// Değerleri azalan sıraya göre sırala
var sirala = from entry in sonuc orderby entry.Value descending select entry;
// Sonucu Tuple biçimine dönüştür
Tuple<int, int>[] degerler = sirala.Select(o => Tuple.Create(o.Key, o.Value)).ToArray();
char harf = (char) degerler[0].Item1;
int adet = degerler[0].Item2;
Console.WriteLine($"[{harf}, {adet}");
Console.Read();
}
}