CSES - Jakauma

Tehtäväsi on muodostaa jakauma merkkijonon erilaisten osajonojen pituuksista.

Esimerkiksi merkkijonossa abab erilaiset osajonot ovat a, b, ab, ba, aba, bab ja abab. Tässä tapauksessa jakauma on seuraava:

  • pituus 11: osajonojen määrä 22
  • pituus 22: osajonojen määrä 22
  • pituus 33: osajonojen määrä 22
  • pituus 44: osajonojen määrä 11

Toteuta tiedostoon distribution.py funktio create_distribution, joka muodostaa parametrina annetun merkkijonon erilaisten osajonojen jakauman. Funktion tulee palauttaa jakauma sanakirjana esimerkkien mukaisesti.

Funktiota testataan eri tilanteissa, joissa merkkijonon pituus on enintään 2020 merkkiä ja se muodostuu merkeistä az. Funktion tulee toimia tehokkaasti kaikissa tällaisissa tapauksissa.

def create_distribution(string):
    # TODO

if __name__ == "__main__":
    print(create_distribution("aaaa"))
    # {1: 1, 2: 1, 3: 1, 4: 1}
    
    print(create_distribution("abab"))
    # {1: 2, 2: 2, 3: 2, 4: 1}
    
    print(create_distribution("abcd"))
    # {1: 4, 2: 3, 3: 2, 4: 1}

    print(create_distribution("abbbbbb"))
    # {1: 2, 2: 2, 3: 2, 4: 2, 5: 2, 6: 2, 7: 1}

    print(create_distribution("aybabtu"))
    # {1: 5, 2: 6, 3: 5, 4: 4, 5: 3, 6: 2, 7: 1}