Démonstration animée d'application de pile : Correspondance de parenthèses Visualisez votre code avec des animations

图码-数据结构可视化动画版

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

示例 : 

输入 :exp = “[()]{}{[()()]()}” 
输出 :Balanced
解释: 所有括号格式正确

输入 :exp = “[(])” 
输出 :Not Balanced 
解释:1 4 括号不平衡,因为 
在右括号 '(' 之前有一个右括号 ']'

使用Stack 检查平衡括号表达式

这个想法是将所有左括号放入堆栈中。 每当您击中右括号时,请搜索堆栈顶部是否是相同性质的左括号。 如果成立,则弹出堆栈并继续迭代。 最后如果堆栈为空,则意味着所有括号都是平衡的或格式良好的。 否则,它们就不平衡。

插图: 
下面是上述方法的插图。

请按照下面提到的步骤来实现这个想法:

  • 声明一个字符 堆栈 (例如 temp )。
  • 现在遍历字符串exp。 
    • 如果当前字符是起始括号( '(' 或 '{' 或 '[' ),则将其压入堆栈。
    • 如果当前字符是右括号( ')' 或 '}' 或 ']' ),则从堆栈中弹出,如果弹出的字符是匹配的起始括号,则可以。
    • 否则括号 不平衡
  • 完成遍历后,如果堆栈中留下一些起始括号,则表达式为 Not Balanced ,否则为 Balanced

下面是上述方法的实现:

C++

// C++ program to check for balanced brackets.
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if brackets are balanced
bool areBracketsBalanced(string expr)
{
    // Declare a stack to hold the previous brackets.
    stack<char> temp;
    for (int i = 0; i < expr.length(); i++) {
        if (temp.empty()) {
             
            // If the stack is empty
            // just push the current bracket
            temp.push(expr[i]);
        }
        else if ((temp.top() == '(' && expr[i] == ')')
                 || (temp.top() == '{' && expr[i] == '}')
                 || (temp.top() == '[' && expr[i] == ']')) {
             
            // If we found any complete pair of bracket
            // then pop
            temp.pop();
        }
        else {
            temp.push(expr[i]);
        }
    }
    if (temp.empty()) {
         
        // If stack is empty return true
        return true;
    }
    return false;
}
 
// Driver code
int main()
{
    string expr = "{()}[]";
 
    // Function call
    if (areBracketsBalanced(expr))
        cout << "Balanced";
    else
        cout << "Not Balanced";
    return 0;
}


            

C

Java

Python3

C#

JavaScript

输出

均衡

时间复杂度: O(N),对大小为 N 的字符串迭代一次。
辅助空间: 堆栈的 O(N)。 

在不使用堆栈的情况下检查平衡括号表达式:

以下是应遵循的步骤:

  • -1 初始化变量 i
  • 遍历字符串并 
    • 如果它是左括号,则将计数器加 1,并将 字符串中的 第 i 个字符替换为左括号。
    • 否则,如果它是相同的相应左括号(左括号存储在 exp[i] 中)的右括号,则将 i 减1。
  • 最后,如果我们得到 i = -1 ,那么字符串是平衡的,我们将返回 true。 否则,该函数将返回 false。

下面是上述方法的实现:

C++

#include <iostream>
 
using namespace std;
 
 bool areBracketsBalanced(string s) {
        int i=-1;
        for(auto& ch:s){
            if(ch=='(' || ch=='{' || ch=='[')
                s[++i]=ch;
            else{
                if(i>=0 && ((s[i]=='(' && ch==')') || (s[i]=='{' && ch=='}') || (s[i]=='[' && ch==']')))
                    i--;
                else
                    return false;
            }
        }
        return i==-1;
    }
 
int main()
{
    string expr = "{()}[]";
 
    // Function call
    if (areBracketsBalanced(expr))
        cout << "Balanced";
    else
        cout << "Not Balanced";
    return 0;
}


            

Java

C#

Python3

JavaScript

输出

均衡

时间复杂度 :O(N),对大小为 N 的字符串迭代一次。
辅助空间 :O(1)


Que votre objectif soit la réussite d'un examen, le développement professionnel ou un intérêt purement personnel, ce site de visualisation des structures de données et des algorithmes sera une ressource inestimable.

Rendez-vous sur ce site et commencez votre voyage d'apprentissage !

Voici les plus courants : 【Description en langage C】Structures de données et algorithmes Implémentation JAVA des structures de données Fondamentaux des structures de données et algorithmes (Université de Qingdao - Wang Zhuo) Structures de données et algorithmes Structures de données selon Wang Dao Implémentation en langage C des structures de données Cours intensif de structures de données pour les examens de fin de semestre Tutoriel vidéo sur les structures de données en langage C Yan Weimin sur les structures de données Hao Bin sur les structures de données Examen d'entrée en master sur les structures de données Algorithmes et fondamentaux des structures de données en JAVA Structures de données selon Wang Dao 2022 Apprentissage des structures de données Structures de données selon Xiao Jiayu Wang Zhuo Apprentissage des structures de données Structures de données à l'Université du Zhejiang Révision des structures de données Structures de données selon Ma Shibin Cours zéro sur les structures de données Structures de données et algorithmes Introduction aux structures de données Explication des exercices de structures de données pour l'examen d'entrée en master Révision de fin de semestre des structures de données Niveau 2 en informatique