- urandom0: Új kedvenc asztali környezetem, az LXQt
- Mr Dini: Mindent a StreamSharkról!
- sellerbuyer: Nem veszélytelen a RAM duplázás de vajon megéri?
- gban: Ingyen kellene, de tegnapra
- Luck Dragon: Asszociációs játék. :)
- Geri Bátyó: Agglegénykonyha 6 – Néhány egyszerű tésztaétel
- Geri Bátyó: Agglegénykonyha 5 – Edények és konyhai eszközök
- aquark: A ló túloldalán (Intel-AMD szivatás)
- sziku69: Fűzzük össze a szavakat :)
- sellerbuyer: Milyen laptopot vegyek? Segítek: semmilyet!
-
LOGOUT
Ú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
Hirdetés
● olvasd el a téma összefoglalót!
- Facebook és Messenger
- Lakáshitel, lakásvásárlás
- Hetekig bírják töltő nélkül a Huawei sportórái
- Futás, futópályák
- Villanyszerelés
- A processzorba integrált hűtésen dolgozik a Microsoft
- Eredeti játékok OFF topik
- Milyen házat vegyek?
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- Apple iPhone Air - almacsutka
- További aktív témák...
- P14s Gen5 14.5" 3K IPS Ultra 7 165H RTX 500 Ada 32GB 1TB NVMe magyar vbill ujjlolv IR kam gar
- Apple Macbook Pro 13" A1706 late 2017 Silver (EMC 3163)
- Mac mini M1 chip 8 magos CPU-val, 8 magos GPU-val
- Hibátlan Apple iPad 10.9 2022 64GB WiFi + Apple iPad Smart Cover eladó! Garancia!
- Asus TUF Gaming A15 FA507 - 15,6"FHD 144Hz - Ryzen 7 7435HS - 16GB - 512GB SSD - RTX 4050 -2+ év gar
- MSI Sword 16 - Core i7 / RTX 4050 / per key RGB / magyar garancia
- Fujitsu LIFEBOOK E449 i3-8130U 8GB 256GB 14" FHD 1 év garancia
- GYÖNYÖRŰ iPhone 13 256GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3427, 100% Akkumulátor
- GYÖNYÖRŰ iPhone 11 128GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS3127
- Samsung Galaxy A23 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest