Facebook
From Tiny Agouti, 3 Years ago, written in Python.
This paste is a reply to Ejercicio corchetes balanceados from jose - view diff
Embed
Download Paste or View Raw
Hits: 103
  1. # diccionario para saber cual es el cierre de cada simbolo
  2. simbols = {
  3.     "[": "]",
  4.     "(": ")",
  5.     "{": "}"
  6. }
  7. # devuelve True si es un simbolo de apertura si no es apertura devuelve False
  8. def isopenSimbol(key):
  9.     if key in simbols:
  10.         return True
  11.     else:
  12.         return False
  13.  
  14. def parseString(stringtest):
  15.     # array que usamos como una pila LIFO
  16.     openStack = []
  17.     for car in range(len(cadena)):
  18.         currSimbol = stringtest[car]
  19.         print(openStack)
  20.         if isopenSimbol(currSimbol):
  21.             openStack.append(currSimbol)
  22.         else:
  23.             stacksize = int(len(openStack)) # tamaño actual de la pila
  24.             if stacksize>0: # si contiene elementos de apertura comparamos con el elemento detectado de cierre actual
  25.                 lastOpen = openStack[stacksize-1]
  26.                 if simbols[lastOpen] == currSimbol: # si el caracter actual es un caracter de cierre del ultimo abierto lo quitamos de la pila
  27.                     openStack.pop() # quitamos el ultimo elemento de la pila
  28.     if len(openStack)>=1:
  29.         return False
  30.     else:
  31.         return True
  32.  
  33.  
  34. ## inicio
  35. cadena = input("Introduce cadena ")
  36. tamcadena = len(cadena)
  37.  
  38. if tamcadena % 2 != 0 and isopenSimbol(cadena[0]) == False: # numero de elementos impares o el primero es un cierre
  39.     print("Error")
  40. else:
  41.     if parseString(cadena):
  42.         print(f"cadena  {cadena} correcta")
  43.     else:
  44.         print(f"cadena  {cadena} incorrecta")
  45.