2132 - Min Subsir

De la Universitas MediaWiki

Se consideră un șir de caractere format din litere mici ale alfabetului englez.

Cerinţa

Să se determine lungimea minimă a unei secvențe care conține toate literele întâlnite în șirul inițial.

Date de intrare

Programul citește de la tastatură șirul de caractere.

Date de ieşire

Programul va afișa pe ecran lungimea secvențele cerute.

Restricții și precizări

  • 1 ⩽ lungime sir ⩽ 10000

Exemplul 1

Intrare
aadcaabcbacadca
Ieșire
Datele introduse corespund restricțiilor impuse.
5


Exemplul 2

Intrare
54454534
Ieșire
Datele introduse nu corespund restricțiilor impuse.


Explicație

Sunt folosite literele: a,b,c,d.

Secvențe de lungime minimă care folosesc toate literele: dcaab, bacad.

Rezolvare

# 2132 -Min Subsir
def verificare(verif_car):
    # Verificăm dacă lungimea șirului este în intervalul [1, 10000]
    if 1 <= len(verif_car) <= 10000:
        # Verificăm dacă șirul conține doar litere mici ale alfabetului englez
        if not all(c.islower() for c in verif_car if not c.isspace()):
            # Dacă șirul conține alte caractere, ridicăm o excepție
            raise ValueError
        # Dacă șirul este valid, îl returnăm
        return verif_car
    else:
        # Dacă șirul nu este valid, ridicăm o excepție
        raise ValueError


# Funcția lungime_minima determină lungimea minim
def lungime_minima(min_lung):
    litere_unice = set(min_lung)
    lungime_min = len(min_lung)
    for i in range(len(min_lung)):
        for j in range(i, len(min_lung)):
            if set(min_lung[i:j+1]) == litere_unice:
                lungime_min = min(lungime_min, j-i+1)
    return lungime_min


if __name__ == "__main__":
    try:
        # Citim șirul de la utilizator
        s = input("Introduceti sirul de caractere: ")
        # Validăm șirul
        s = verificare(s)
        print("Datele introduse corespund restricțiilor impuse.")
        print(lungime_minima(s))
    except ValueError:
        # Dacă șirul nu este valid, afișăm un mesaj de eroare
        print("Datele introduse nu corespund restricțiilor impuse.")