栈的经典运用,括号匹配。
思路:收到“(" "["时入栈,收到”)" "]",出栈,最后判断栈是否为空
//673 - Parentheses Balance
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
char str[130];
int main()
{
//freopen("data.txt", "r", stdin);
int n;
scanf("%d", &n);
getchar();
while (n--)
{
stack<char> s;//栈定义在while循环内就不用手动空栈
cin.getline(str, 130);
if(strlen(str) % 2 == 0)
{
for(int i = 0; i < strlen(str); i++)
if(str[i] == '(')
s.push(str[i]);
else if(str[i] == '[')
s.push(str[i]);
else if(str[i] == ')' && !s.empty() && s.top() == '(')//弹出时一定要先检测是否空栈
s.pop();
else if(!s.empty() && s.top() == '[')
s.pop();
if(s.empty())
printf("Yes\n");
else
printf("No\n");
}
else
printf("No\n");
}
return 0;
}