0849 - Paranteze2

From Bitnami MediaWiki

Cerința[edit | edit source]

Se dă un șir de paranteze rotunde care se închid corect (corect parantezat). Să se determine adâncimea parantezării.

Pentru un șir de paranteze închise corect S, adâncimea parantezării, D(S) este definită astfel:

dacă șirul S este vid, D(S)=0 dacă S=(T), unde T este un șir de paranteze corect, D(S)=1+D(T) dacă S=AB, unde A și B sunt șiruri de paranteze corecte, D(S)=max{D(A),D(B)}

Date de intrare[edit | edit source]

Fișierul de intrare paranteze2in.txt conține pe prima un șir de paranteze rotunde, corect parantezat.

Date de ieșire[edit | edit source]

Fișierul de ieșire paranteze2out.txt va conține pe prima linie un număr M, reprezentând adâncimea parantezării.

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

  • șirul va conține cel mult 254 de paranteze

Exemplul 1:[edit | edit source]

paranteze2in.txt

1
()((()())())

paranteze2out.txt


Datele de intrare corespund restrictiilor impuse.
3

Exemplul 2:[edit | edit source]

paranteze2in.txt

h

paranteze2out.txt

Datele de intrare nu corespund restrictiilor impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1">

def validare(strings): # functia de validare a datelor de intrare

   for sir in strings:
       if len(sir) > 254:
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def adancime_parantezare(sir): # functia de rezolvare

   adancime_maxima = 0
   adancime_curenta = 0
   for paranteza in sir:
       if paranteza == '(':
           adancime_curenta += 1
           if adancime_curenta > adancime_maxima:
               adancime_maxima = adancime_curenta
       elif paranteza == ')':
           adancime_curenta -= 1
   return adancime_maxima


if __name__ == '__main__':

   file_in = open('paranteze2in.txt', 'r')
   file_out = open('paranteze2out.txt', 'w')
   try:
       n = int(file_in.readline().strip())
       siruri = [file_in.readline().strip() for _ in range(n)]
       validare(siruri)
       rezultate = [adancime_parantezare(sir) for sir in siruri]
       for rezultat in rezultate:
           file_out.write(str(rezultat) + '\n')
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>