Programa C++ para verificar paréntesis equilibrados en una expresión (buena formación) usando Stack

Dada una string de expresión exp, escriba un programa para examinar si los pares y los órdenes de “{“, “}”, “(“, “)”, “[“, “]” son correctos en exp.

Ejemplo

Entrada : exp = “[()]{}{[()()]()}” 
Salida : Balanceada

Entrada : exp = “[(])” 
Salida : No balanceada 

check-for-balanced-parentheses-in-an-expression

Algoritmo: 

  • Declara una pila de caracteres S.
  • Ahora recorra la string de expresión exp. 
    1. Si el carácter actual es un corchete de inicio ( ‘(‘ o ‘{‘ o ‘[‘ ) entonces empújelo para apilar.
    2. Si el carácter actual es un corchete de cierre ( ‘)’ o ‘}’ o ‘]’ ), entonces salte de la pila y si el carácter reventado es el corchete de inicio correspondiente, entonces bien, de lo contrario, los corchetes no están equilibrados.
  • Después de completar el recorrido, si queda algún soporte inicial en la pila, entonces «no está equilibrado»

La imagen de abajo es una ejecución en seco del enfoque anterior:

A continuación se muestra la implementación del enfoque anterior:

C++

// CPP program to check for balanced brackets.
#include <bits/stdc++.h>
using namespace std;
  
// function to check if brackets are balanced
bool areBracketsBalanced(string expr)
{  
    stack<char> s;
    char x;
  
    // Traversing the Expression
    for (int i = 0; i < expr.length(); i++) 
    {
        if (expr[i] == '(' || expr[i] == '['
            || expr[i] == '{') 
        {
            // Push the element in the stack
            s.push(expr[i]);
            continue;
        }
  
        // IF current current character is not opening
        // bracket, then it must be closing. So stack
        // cannot be empty at this point.
        if (s.empty())
            return false;
  
        switch (expr[i]) {
        case ')':
              
            // Store the top element in a
            x = s.top();
            s.pop();
            if (x == '{' || x == '[')
                return false;
            break;
  
        case '}':
  
            // Store the top element in b
            x = s.top();
            s.pop();
            if (x == '(' || x == '[')
                return false;
            break;
  
        case ']':
  
            // Store the top element in c
            x = s.top();
            s.pop();
            if (x == '(' || x == '{')
                return false;
            break;
        }
    }
  
    // Check Empty Stack
    return (s.empty());
}
  
// Driver code
int main()
{
    string expr = "{()}[]";
  
    // Function call
    if (areBracketsBalanced(expr))
        cout << "Balanced";
    else
        cout << "Not Balanced";
    return 0;
}
Producción

Balanced

Complejidad de Tiempo: O(n) 
Espacio Auxiliar: O(n) para pila. 

¡Consulte el artículo completo sobre Verificación de paréntesis equilibrados en una expresión (bien formado) usando Stack para obtener más detalles!

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *