CSES - Poistot

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ä ac saadaan kerättyä vähintään kk kappaletta?

Voit olettaa, että merkkijono muodostuu merkeistä ac, siinä on enintään 10510^5 merkkiä ja kutakin merkkiä on vähintään kk kappaletta. Tavoitteena on, että algoritmin aikavaativuus on O(n)O(n).

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 66 merkkiä, jotta saamme kerättyä kutakin merkkiä vähintään yhden kappaleen. Yksi mahdollinen tapa on poistaa 55 merkkiä merkkijonon alusta ja 11 merkki merkkijonon lopusta. Olisi myös mahdollista poistaa 55 merkkiä lopusta ja 11 alusta.