堆栈:C 失败中的平衡括号

Stacks: Balanced Brackets in C++ Failing

本文关键字:平衡 失败 堆栈      更新时间:2023-10-16

我正在尝试在C 中创建平衡括号代码。我有两个功能is_balancedconvert_bracket。基本上,在is_balanced中,我将左括号添加到堆栈中,并在字符串中出现相应的右支架时将它们弹出。但是,由于某种原因,即使s = '('bracketStack.top() == ')'(Convert_bracket将将其转换为'('),s == convert_bracket(bracketStack.top())也总是失败。我需要这种情况可以通过,以便可以从堆栈中取出该物品。我可以得到任何建议吗?

#include <map>
#include <set>
#include <stack>
#include <string>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <unordered_map>
using namespace std;
char convert_bracket(char s) {
    switch(s){
        case ')': s = '(';
            break;
        case ']': s= '[';
            break;
        case '}': s= '{';
            break;
    }
    return s;
}
bool is_balanced(string expression) {
    stack<char> bracketStack;
    for(char s : expression){
        if(s == '(' || s == '[' || s == '{'){
            bracketStack.push(s);
        } else {
            if(bracketStack.size()>0 && s == convert_bracket(bracketStack.top())) {
                bracketStack.pop();
            } else {
                return false;
            }
        }
    }
  if(bracketStack.size() == 0)
  {
        return true;
  }  else {
       return false;
  }
}
int main(){
    string expression = "{[()]}";
    bool answer = is_balanced(expression);
    if(answer)
        cout << "YESn";
    else cout << "NOn";
    return 0;
}

您将3个打开的括号类型推向堆栈。但是,您的案例声明正在检查3种关闭类型,因此它始终返回通过的内容,因此检查将失败。

切换逻辑,这样它就是这样:

char convert_bracket(char s)
{
     switch(s)
     {
         case '(': s = ')';
                   break;
         case '[': s= ']';
                   break;
         case '{': s= '}';
                   break;
     }
     return s;
}

您指的是Hackerrank挑战赛对吗?诀窍是检查过程结束时堆栈是否为空。
您可能最终具有平衡的支架和不完整的支架!