Tehtäväsi on laskea, moniko annetun merkkijonon osajono sisältää merkkijonon tira alijonona.
\newcommand{\T}{\texttt} \newcommand{\U}[1]{\underline{\smash{\T{#1}}}}
Merkkijono sisältää jonon tira alijonona silloin, kun merkkijonosta voidaan muodostaa merkkijono tira poistamalla siitä mahdollisesti osa merkeistä muuttamatta merkkien järjestystä. Esimerkiksi \U{t}\T{a}\U{i}\T{ku}\U{r}\T{inh}\U{a}\T{ttu} sisältää sanan tira alijonona, mutta \T{ritari} ei sisällä.
Algoritmin aikavaativuuden tulee olla O(n).
Toteuta tiedostoon sequences.py funktio count, joka palauttaa sellaisten osajonojen määrän, joilla on tira alijonona.
def count(s):
# TODO
if __name__ == "__main__":
print(count("ritari")) # 0
print(count("taikurinhattu")) # 4
print(count("ttiirraa")) # # 4
print(count("tixratiyra")) # 11
print(count("aotiatraorirratap")) # 42
Selitys: Esimerkiksi merkkijonossa tixratiyra on 11 osajonoa, jotka sisältävät jonon tira alijonona:
- \U{tixratiyra}
- \U{tixratiyr}\T{a}
- \U{tixratiy}\T{ra}
- \U{tixrati}\T{yra}
- \U{tixrat}\T{iyra}
- \U{tixra}\T{tiyra}
- \T{tixra}\U{tiyra}
- \T{tixr}\U{atiyra}
- \T{tix}\U{ratiyra}
- \T{ti}\U{xratiyra}
- \T{t}\U{ixratiyra}
Huomaa, että kelvollinen osajono saa sisältää sanan tira alijonona myös useampia kertoja. Esimerkiksi sanasta tixratiyra voidaan lukea tira mm. \U{ti}\T{xratiy}\U{ra} tai \U{ti}\T{x}\U{r}\T{atiyr}\U{a}
