📌  相关文章
📜  使用堆栈检查表达式(格式良好)中的平衡括号的 C++ 程序

📅  最后修改于: 2022-05-13 01:57:06.933000             🧑  作者: Mango

使用堆栈检查表达式(格式良好)中的平衡括号的 C++ 程序

给定一个表达式字符串exp,编写一个程序来检查 exp 中“{“, “}”, “(“, “)”, “[”, “]” 的对和顺序是否正确。

示例

检查表达式中的平衡括号

算法:

  • 声明一个字符栈 S。
  • 现在遍历表达式字符串exp。
    1. 如果当前字符是起始括号( '(' 或 '{' 或 '[' ),则将其推入堆栈。
    2. 如果当前字符是右括号( ')' 或 '}' 或 ']' ),则从堆栈中弹出,如果弹出的字符是匹配的起始括号,则可以,否则括号不平衡。
  • 完全遍历后,如果堆栈中还有一些起始括号,则“不平衡”

下图是上述方法的试运行:

下面是上述方法的实现:

C++
// CPP program to check for balanced brackets.
#include 
using namespace std;
  
// function to check if brackets are balanced
bool areBracketsBalanced(string expr)
{  
    stack 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;
}


输出
Balanced

时间复杂度: O(n)
辅助空间:堆栈的 O(n)。

有关更多详细信息,请参阅有关使用 Stack 的表达式(格式良好)检查平衡括号的完整文章!