Bilişim dünyasına kaliteli, özgün ve Türkçe içerikler kazandırmayı hedefleyen bir platform..

friends friends friends

Manacher's Algoritması

Kodları şöyle:

def manacher(s):
    # Ön işleme (# ekleyerek tek ve çift uzunluklu palindromları birleştir)
    t = "#" + "#".join(s) + "#"

    n = len(t)
    p = [0] * n

    center = 0
    right = 0

    max_len = 0
    max_center = 0

    for i in range(n):

        mirror = 2 * center - i

        if i < right:
            p[i] = min(right - i, p[mirror])

        # Palindromu genişlet
        while (i - p[i] - 1 >= 0 and
               i + p[i] + 1 < n and
               t[i - p[i] - 1] == t[i + p[i] + 1]):
            p[i] += 1

        # Sağ sınır güncelle
        if i + p[i] > right:
            center = i
            right = i + p[i]

        # En uzun palindrom
        if p[i] > max_len:
            max_len = p[i]
            max_center = i

    # Orijinal stringde başlangıç konumu
    start = (max_center - max_len) // 2

    return s[start:start + max_len]
0 Beğeni
Algoritmalar
Önceki Yazı

Recamán Dizisi Nedir?

14 Tem. 2026 tarihinde yayınlandı.
Sonraki Yazı

Fotoğrafın Üzerine Çizilen Bir Rotayı Takip Eden Drone Videosu

14 Tem. 2026 tarihinde yayınlandı.
arrow