Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Kahden merkkijonon pisin yhteinen osa

Emiiri [10.02.2021 00:41:29]

#

Terve! Python aloittelija tässä ja tekemässä tällästä tehtävää:

Kirjoita ohjelma, joka etsii kahden merkkijonon pisimmän yhteisen osan
Esimerkiksi jos merkkijonot ovat 'tausta' ja 'muste', pisin yhteinen osa on 'ust'

Olisko mitään esimerkkejä kuinka kirjoittaa tällänen ohjelma?

Kiitos avusta!

Grez [10.02.2021 07:48:31]

#

Naiivi bruteforce-toteutus olisi käydä ensimmäistä sanaa kirjain kirjaimelta ja kokeilla, löytyisikö toisesta sanasta samaa kirjainta ja kunkin osuman kohdalla laskea myös seuraavat kirjaimet. Sitten tallennetaan paras osumakohta ja paras pituus.

Edellä kuvatusta voi sitten lähteä optimoimaan jos tarvitsee nopeampaa suoritusta, mutta noin pitkillä sanoilla naiivikin toteutus on varmasti riittävä.

Emiiri [12.02.2021 00:09:13]

#

Kiitos avusta!

Metabolix [12.02.2021 09:36:46]

#

Ongelmanratkaisun perusta on se, että jaetaan ongelma pienempiin osiin. Tämän tehtävän voi hahmottaa palasina ainakin kahdella tavalla:

Tapa 1: Miten pitkä yhteinen osa merkkijonoilla on, kun aloitetaan vertailu jostain tietystä kohdasta? Miten käydään läpi kaikki mahdolliset aloituskohdat kummastakin merkkijonosta?

Tapa 2: Miten käydään läpi kaikki mahdolliset ensimmäisen merkkijonon palaset? Miten selvitetään, sisältyykö kyseinen pala toiseen merkkijonoon?

Jaska [12.02.2021 10:05:18]

#

Pythonissa on myös valmiina kirjasto, jossa on kyseinen algoritmi:

from difflib import SequenceMatcher
string1 = 'Ohjelmointi on kivaa'
string2 = 'Minusta ohjelmointi on toisinaan helppoa, toisinaan vaikeaa'
match = SequenceMatcher(None, string1, string2).find_longest_match(0, len(string1), 0, len(string2))
print(string1[match.a: match.a + match.size])

Tulostus: hjelmointi on

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta