code-neon

C# En Uzun Tekrar Eden Alt Dize Bulma

Kullanıcının girdiği metindeki en uzun tekrar eden alt diziyi bulan C# programı.

using System;
using System.Collections.Generic;
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Metni girin: ");
        string metin = Console.ReadLine();

        string enUzunAltDizi = FindLongestRepeatingSubstring(metin);

        Console.WriteLine("En uzun tekrar eden alt dize: " + enUzunAltDizi);
    }

    private static string FindLongestRepeatingSubstring(string str)
    {
        int len = str.Length;
        string enUzunAltDizi = "";
        for (int i = 0; i < len; i++)
        {
            for (int j = i + 1; j < len; j++)
            {
                string altDizi = str.Substring(i, j - i);
                int tekrarSayisi = CountOccurrences(str, altDizi);
                if (tekrarSayisi > 1 && altDizi.Length > enUzunAltDizi.Length)
                {
                    enUzunAltDizi = altDizi;
                }
            }
        }
        return enUzunAltDizi;
    }

    private static int CountOccurrences(string str, string subStr)
    {
        int count = 0;
        int i = 0;
        while ((i = str.IndexOf(subStr, i)) != -1)
        {
            i += subStr.Length;
            count++;
        }
        return count;
    }
}

C# ile Kullanıcıdan bir metin alıyhoruz.

        Console.Write("Metni girin: ");
        string metin = Console.ReadLine();

C# ile En uzun tekrar eden alt dizeyi saklamak için bir değişken oluşturuyoruz.

        string enUzunAltDizi = FindLongestRepeatingSubstring(metin);

C# ile Sonuçları ekrana yazdırıyoruz.

        Console.WriteLine("En uzun tekrar eden alt dize: " + enUzunAltDizi);
    }

C# ile Verilen metindeki en uzun tekrar eden alt dizeyi bulan metot.

    private static string FindLongestRepeatingSubstring(string str)
    {
        int len = str.Length;
        // En uzun alt dizeyi saklamak için boş bir dize oluşturuyoruz.
        string enUzunAltDizi = "";
        // Tüm alt dize kombinasyonlarını deneyerek en uzun tekrar eden alt dizeyi buluyoruz.
        for (int i = 0; i < len; i++)
        {
            for (int j = i + 1; j < len; j++)
            {
                // Bir alt dize seçiyoruz.
                string altDizi = str.Substring(i, j - i);
                // Alt dizenin metinde kaç kez tekrar ettiğini sayıyoruz.
                int tekrarSayisi = CountOccurrences(str, altDizi);
                // Eğer alt dize en az 2 kez tekrar ediyorsa ve daha uzunsa, en uzun alt dizeyi güncelliyoruz.
                if (tekrarSayisi > 1 && altDizi.Length > enUzunAltDizi.Length)
                {
                    enUzunAltDizi = altDizi;
                }
            }
        }
        return enUzunAltDizi;
    }

C# ile Verilen alt dizenin metinde kaç kez tekrar ettiğini sayan metot.

    private static int CountOccurrences(string str, string subStr)
    {
        int count = 0;
        int i = 0;
        while ((i = str.IndexOf(subStr, i)) != -1)
        {
            i += subStr.Length;
            count++;
        }
        return count;
    }