Hirdetés
- Nosztalgikus húrokat pendít meg a Qwertykeys legújabb, szürreális ajánlata
- Az AMD X870 platform meghódítására tör a Sapphire alaplapos divíziója
- Ha a koreaiakon múlik, még évekig ingünk-gatyánk rámehet a memóriákra
- Ilyen blokkot sem láttunk még készre szerelt vízhűtésnél
- Kinyírta a Netflix a telefonos tükrözést
- Milyen egeret válasszak?
- Milyen billentyűzetet vegyek?
- Amazon Kindle
- 5.1, 7.1 és gamer fejhallgatók
- Sony MILC fényképezőgépcsalád
- HiFi műszaki szemmel - sztereó hangrendszerek
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Az AMD X870 platform meghódítására tör a Sapphire alaplapos divíziója
- Projektor topic
- Telekom TV SmartBox: szolgáltatói set-top box alacsony korlátokkal
-
PROHARDVER!

Új hozzászólás Aktív témák
-
válasz
#83580928
#12429
üzenetére
Van erre egy viszonylag egyszeru modszer is amugy:
Mivel csak a leghoszabb ismetlodo kell, mas nem (hanyszor ismetlodik, hany darab ismetlodo van, stb), ezert eleg egyszeruen megirhato, ami ugy nez ki, hogy kezdesz a string hossza / 2-tol (compareLength), es ezt lepteted 1-esevel lefele, illetve compLength-hasonlitgatsz szeleteket, a stringen meg egyesevel lepkedsz elore (i). Egy masik ciklus meg annyit csinal, hogy (i) + compareLength-rol indul, es egyesevel compareLength meretu string szeleteket hasonlit ossze az elso ciklusbol kieso szelettel. Az elso adando alkalommal, amikor talal valamit, megvan a leghoszabb egyezes (mivel a leheto legnagyobb ismetlodo string az, ha a teljes hosszaban ketszer szerepel ugyanaz).Ez se tul optimalis, de nem olyan nehez megirni, es azert annyira nem veszesen lassu.
Direkt nem irtam hozza kodot (meg pszeudot sem), mert igy meg kell erteni az implementalashoz a mindent.

-
Domonkos
addikt
válasz
#83580928
#12429
üzenetére
text=input().lower()
rep = []
for a in range(len(text)):
for b in range(a+1,len(text)):
ans = ''
i = 0
while (i < len(text) - b):
if text[a+i] == text[b+i] :
ans+= text[b+i]
i+=1
else:
break
rep.append(ans)
m = ''
for i in rep:
if len(i)>len(m):
m = i
if m == '':
print('None')
else:
print(m)Nem optimalis, de szerintem ertheto.
-
kovisoft
őstag
válasz
#83580928
#12430
üzenetére
Egy lehetséges megoldás (bár nem optimális, mert közel n-köbös, de nem volt szempont a gyorsaság):
Egy x változóval egyesével végigmész a karakterláncon. Minden egyes x pozícióra egy y változóval végigmész a rákövetkező karaktertől kezdve a fennmaradó pozíciókon. Egy h változóval addig mész, amíg az x és y kezdetű stringek karakterei megegyeznek, és amíg nincs átfedés (azaz x+h el nem éri az y-t). Tehát így h-ban lesz az aktuális ismétlődő szakasz hossza. Ha az így kapott h nagyobb, mint a korábban megjegyzett legnagyobb hossz, akkor megjegyzed a h hosszt és az x pozíciót egy-egy újabb változóban. Minden ciklus addig megy, amíg a string végére nem ér.
Ha ennél gyorsabb algoritmus kellene, akkor keress rá a "prefix tree"-re, egy ilyen struktúra felépítésével lényegesen gyorsabban lehet ismétlődéseket keresni egy stringben.
-
#83580928
törölt tag
válasz
#83580928
#12429
üzenetére
Az úgy például jó elgondolás, hogy mondjuk megnézem az első két karakterláncot (CG) és megnézem string maradék részében, hogy ismétlődik-e, ha igen akkor elmentem egy segédtömbbe. Utána megnézem az első három karaktert, megnézem hogy ismétlődik-e a maradék karakterekben, ha igen elmentem a segédtömb következő indexébe. Így tovább.Viszont ha az első két karakter nem ismétlődik, akkor tovább ugrok a következőre (GA).Ha mondjuk egy változóban mindig tárolnám a leghosszabb hosszt és ha mondjuk az elején lenne egy 4 karakternyi hosszúságú ismétlődés, akkor azután már 5 karakternyi hosszúságút keressen, mert a többi nem érdekel minket. Sokkal kevesebb találat lenne és kevesebb adat is kerülne a segédtömbbe. Ez így jó ? Meg eleve csak a string feléig kell keresnem, mert utána már nem ismétlődhet.
Példa: CGACCGACCGAT
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Formula-1
- Red Dead Redemption 2 (PC)
- Okos Otthon / Smart Home
- Elektromos autók - motorok
- Milyen egeret válasszak?
- Milyen billentyűzetet vegyek?
- Papírvékony a jövő a Samsungnál: íme, a Galaxy TriFold!
- Luck Dragon: Asszociációs játék. :)
- One otthoni szolgáltatások (TV, internet, telefon)
- Amazon Kindle
- További aktív témák...
- Dell 27" 2K sok kis karc a képen! P2723D 27" IPS panel 2560x1440 QHD Pivot HDMI
- Apple iPhone 15 256GB,Újszerű,Dobozával,12 hónap garanciával
- Onikuma GT808 Tri-Mode Vezeték Nélküli Gamer Headset
- Vivo V50 12/512GB,Újszerű,Adatkabel,12 hónap garanciával
- Apple iPhone 13 Pro Max 128GB,Újszerű,Dobozával,12 hónap garanciával
- HIBÁTLAN iPhone 12 Pro Max 128GB Pacific Blue -1 ÉV GARANCIA - Kártyafüggetlen, 100% Akksi, MS4011
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RTX 5080 16GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 12 mini 128GB Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS3392, 100% Akkumulátor
- Apple iPhone 12 / 128GB / Kártyafüggetlen / 12Hó Garancia / Akku:86%
- iPhone 13 Pro 128GB Gold -1 ÉV GARANCIA - Kártyafüggetlen, MS3963, 100% Akkumulátor
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: Laptopműhely Bt.
Város: Budapest




