问题描述
表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。
请写一个程序,判断给定表达式中的括号是否匹配,既左右括号顺序和数量都匹配。
输入说明
输入为一个表达式字符串,长度不超过50。
输出说明
对输入的表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。
输入样例
样例1输入
[(d+f)*{}2]
样例2输入
[(2+3))
输出样例
样例1输出
yes
样例2输出
no
思路:由红色加粗部分可知,只需扫描一遍,统计数量即可
#include<iostream>
using namespace std;
const int N = 55;
char arr[N];
int a = 0, b = 0, c = 0;
int main(){
cin >> arr;
for(int i = 0; arr[i] != '\0'; i ++ ){
if(arr[i] == '('){
a ++;
}else if(arr[i] == ')'){
a --;
}else if(arr[i] == '['){
b ++;
}else if(arr[i] == ']'){
b --;
}else if(arr[i] == '{'){
c ++;
}else if(arr[i] == '}'){
c --;
}
}
if(a == 0 && b == 0 && c == 0){
cout << "yes";
}else{
cout << "no";
}
return 0;
}