Alınan aşağıdaki tanımlara düşünün bir dizede koşular sayısına W. Rytter tarafından. Sözcük, dize ve alt dizenin kabaca eş anlamlı olduğunu unutmayın.
Bir dizedeki çalışma, bir dizedeki uzatılamaz (aynı minimum periyotla) periyodik segmenttir.
W kelimesinin bir periyodu p, bu denklemin her iki tarafı tanımlandığında w [i] = w [i + p] olacak şekilde herhangi bir pozitif tamsayı p'dir. (W) başına en küçük w döneminin boyutunu belirtelim. W kelimesinin, (w) <= | w | / 2 başına periyodik iff olduğunu söylüyoruz.
Örneğin, dizeyi ele alalım x = abcab. per(abcab) = 3olarak x[1] = x[1+3] = a, x[2]=x[2+3] = bve hiçbir küçük süresi vardır. Bu abcabnedenle dize periyodik değildir. Bununla birlikte, dize abab(abab) = 2'ye göre periyodiktir.
W dizesindeki bir çalışma (veya maksimum periyodiklik) j> = i ile bir aralık [i ... j] 'dır, öyle ki
- w [i ... j] periyodik bir kelimedir ve p = per (w [i ... j])
- Maksimaldir. Resmi olarak, ne w [i-1] = w [i-1 + p] ne de w [j + 1] = w [j + 1-p]. Gayri resmi olarak, çalışma aynı dönemle daha büyük bir çalışmada bulunamaz.
RUNS (w) ile w çalışma kümesini belirtin.
Örnekler
Dört koşusu atattatt[4,5] = tt, [7,8] = tt, [1,4] = atat, [2,8] = tattatt.
Dize aabaabaaaacaacacşu 7 çalışmayı içerir:
[1,2] = aa, [4,5] = aa, [7,10] = aaaa, [12,13] = aa, [13,16] = akas, [1,8] = aabaabaa, [9 , 15] = aakaaka.
Çıktınız bir koşu listesi olmalıdır. Her çalışma temsil ettiği aralığı belirtmelidir, ancak alt dizenin kendisinin çıktısını alması gerekmez. Kesin biçimlendirme sizin için uygun olan her şey olabilir.
Örnekler 1 dizinleme kullanır, ancak daha uygunsa bunun yerine 0 dizinlemeyi kullanabilirsiniz.
GÖREV
Bir dize veren kodu yazın, RUNS (w) çıktısını alın.
Diller ve giriş
İstediğiniz herhangi bir dili kullanabilir ve giriş dizesini en uygun biçimde alabilirsiniz. Ancak tam bir program vermelisiniz ve örnek girişinde çalışan kodunuzun bir örneğini göstermelisiniz.
class A{public static ...}golf kodu istedim her zaman yazmak zorunda Java Java golf olmazdı