2132 - Min Subsir

From Bitnami MediaWiki
Revision as of 15:16, 12 November 2023 by AntalKrisztian (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

Cerinţa[edit | edit source]

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

Date de intrare[edit | edit source]

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

Date de ieşire[edit | edit source]

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

Restricții și precizări[edit | edit source]

  • 1 ⩽ lungime sir ⩽ 10000

Exemplul 1[edit | edit source]

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


Exemplul 2[edit | edit source]

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


Explicație[edit | edit source]

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

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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


  1. 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.")

</syntaxhighlight>