Problem Description
source:https://uva.onlinejudge.org/external/6/673.html
You are given a string consisting of parentheses () and []. A string of this type is said to be correct:
(a) if it is the empty string
(b) if A and B are correct, AB is correct,
(c) if A is correct, (A) and [A] is correct.
Write a program that takes a sequence of strings of this type and check their correctness. Your program can assume that the maximum string length is 128.
Input
The file contains a positive integer n and a sequence of n strings of parentheses ‘()’ and ‘[]’, one string a line.
Output
A sequence of ‘Yes’ or ‘No’ on the output file
Sample Input
3
([])
(([()])))
([()[]()])()
Sample Output
Yes
No
Yes
Solution:
source:https://uva.onlinejudge.org/external/6/673.html
You are given a string consisting of parentheses () and []. A string of this type is said to be correct:
(a) if it is the empty string
(b) if A and B are correct, AB is correct,
(c) if A is correct, (A) and [A] is correct.
Write a program that takes a sequence of strings of this type and check their correctness. Your program can assume that the maximum string length is 128.
Input
The file contains a positive integer n and a sequence of n strings of parentheses ‘()’ and ‘[]’, one string a line.
Output
A sequence of ‘Yes’ or ‘No’ on the output file
Sample Input
3
([])
(([()])))
([()[]()])()
Sample Output
Yes
No
Yes
Solution:
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int i, test, j, len;
char expression[150];
scanf("%d\n", &test);
for(i=1;i<=test;i++)
{
stack<char> mystack;
cin.getline(expression,150);
len=strlen(expression);
if(len==0)
{
printf("Yes\n");
continue;
}
for(j=0; j<len; j++)
{
if(expression[j]=='(' || expression[j]=='[')
mystack.push(expression[j]);
else if (!mystack.empty() && ((mystack.top()=='(') &&(expression[j]==')' ) || (mystack.top()=='[') &&expression[j]==']' ))
mystack.pop();
else if(expression[j]==' ')
continue;
else
break;
}
if(mystack.empty() && len==j)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
No comments:
Post a Comment
Write your comment - Share Knowledge and Experience