Sinulle annetaan merkkijono, joka koostuu vain merkeistä a
, b
tai c
. Voit kerätä merkkejä merkkijonosta poistamalla niitä joko merkkijonon alusta tai lopusta. Kuinka monta merkkiä on vähintään poistettava, jotta jokaista merkkiä a
–c
saadaan kerättyä vähintään kappaletta?
Voit olettaa, että merkkijono muodostuu merkeistä a
–c
, siinä on enintään merkkiä ja kutakin merkkiä on vähintään kappaletta. Tavoitteena on, että algoritmin aikavaativuus on .
Toteuta tiedostoon removals.py
funktio find
, joka kertoo, montako merkkiä on vähintään poistettava.
def find(s, k): # TODO if __name__ == "__main__": print(find("abc", 1)) # 3 print(find("aabca", 1)) # 3 print(find("aaaabbbcccc", 1)) # 6 print(find("aabbaacc", 2)) # 6 print(find("aaaabbbbaaaccccaaccacbbaa", 3)) # 13
Selitys: Merkkijonosta aaaabbbcccc
on poistettava vähintään merkkiä, jotta saamme kerättyä kutakin merkkiä vähintään yhden kappaleen. Yksi mahdollinen tapa on poistaa merkkiä merkkijonon alusta ja merkki merkkijonon lopusta. Olisi myös mahdollista poistaa merkkiä lopusta ja alusta.