总时间限制:1000ms 内存限制: 65536kB
描述
假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可相互嵌套,如([{}])或({[][()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式.
输入一串括号
如果输入的右括号多余,输出:Extra right brackets
如果输入的左括号多余, 输出:Extra left brackets
如果输入的括号不匹配,输出:Brackets not match
如果输入的括号匹配,输出:Brackets match
输入
{{{{)))
输出
Brackets not match
样例输入
{([)]}
样例输出
Brackets not match
ps.优先匹配原则...
参考来源
ac代码
/*
@File : match_bracket_1.cpp
@Time : 2020/03/25 20:16:07
@Desc : 括号匹配(栈实现)
*/
#include <iostream>
#include <stdlib.h>
#define MAX_LEN 50
using namespace std;
//栈
typedef struct
{
char data[MAX_LEN];
int top;
}Stack;
//初始化
void InitStack(Stack *&stack);
//压栈
bool Push(Stack *&stack, const char num);
//弹栈
bool Pop(Stack *&stack);
//栈是否为空
bool Empty(const Stack *stack);
//获取栈顶
bool get_top(const Stack *stack, char &top);
//判断代码
int JudgeCode(const string str);
int main(int argc, char const *argv[])
{
string s;
cin >> s;
switch (JudgeCode(s))
{
case 1:
cout << "Brackets match";
break;
case 2:
cout << "Extra left brackets";
break;
case 3:
cout << "Extra right brackets";
break;
case 4:
cout << "Brackets not match";
break;
}
system("pause");
return 0;
}
void InitStack(Stack *&stack)
{
stack = (Stack*)malloc(sizeof(Stack));
stack->top = -1;
}
bool Push(Stack *&stack, const char num)
{
if (stack->top == MAX_LEN - 1) return false;
stack->top++;
stack->data[stack->top] = num;
return true;
}
bool Pop(Stack *&stack)
{
if (Empty(stack)) return false;
stack->top--;
return true;
}
bool Empty(const Stack *stack)
{
return (stack->top == -1);
}
bool get_top(const Stack *stack, char &top)
{
if (Empty(stack)) return false;
top = stack->data[stack->top];
return true;
}
int JudgeCode(const string str)
{ //括号匹配和回文匹配是不一样的
Stack *stack;
int l = 0, r = 0;
char top;
InitStack(stack);
for (int i = 0; i < str.size(); i++) {
if (get_top(stack,top)) {
if ((top == '('&&str[i] == ')')||(top == '['&&str[i] == ']')||(top == '{'&&str[i] == '}')) Pop(stack);
else Push(stack,str[i]);
}
else Push(stack,str[i]);
}
if (Empty(stack)) return 1;
while (!Empty(stack)) {
get_top(stack,top);
if(top == '('||top == '['||top == '{') l++;
if(top == ')'||top == ']'||top == '}') r++;
Pop(stack);
}
if (l>0&&r==0) return 2;
if (l==0&&r>0) return 3;
if (l>0&&r>0) return 4;
}