Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.
C
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct node
{
char data;
struct node* down;
};
typedef struct node node;
struct stack
{
node* top;
int size;
};
typedef struct stack Stack;
Stack* EmptyStack()
{
Stack *top = (Stack*)malloc(sizeof(Stack*));
if(top)
{
top->top = NULL;
top->size = 0;
}
return top;
}
int IsEmpty(Stack* stack)
{
if(!stack->top && stack->size == 0) return 1;
return 0;
}
node* push(Stack* stack,char element)
{
node* newtop = (node*)malloc(sizeof(node*));
newtop->data = element;
newtop -> down = stack -> top;
stack -> top = newtop;
(stack -> size)++;
return newtop;
}
node* pop(Stack* stack)
{
if(IsEmpty(stack))
{
return NULL;
}
node* p = stack->top;
stack->top = stack->top->down;
(stack->size)--;
free(p);
return stack->top;
}
char gettop(Stack* stack)
{
if(IsEmpty(stack))
{
return -1;
}
return stack->top->data;
}
int isValid(char *s)
{
int i;
Stack *top=EmptyStack();
node* stacknode;
for(i=0;s[i]!='\0';i++){
if(s[i]=='{' || s[i]=='[' || s[i]=='(') stacknode=push(top,s[i]);
else if (s[i]=='}'){
if(gettop(top)=='{') stacknode=pop(top);
else return 0;
}
else if (s[i]==']'){
if(gettop(top)=='[') stacknode=pop(top);
else return 0;
}
else if (s[i]==')'){
if(gettop(top)=='(') stacknode=pop(top);
else return 0;
}
else return 0;
}
if(IsEmpty(top)) return 1;
else return 0;
}
void main(){
char *s="())";
printf("%d\n",isValid(s));
}
C++
class Solution {
public:
bool isValid(string s) {
stack<char> charstack;
string::iterator it = s.begin();
while(it != s.end()) {
if(*it=='{' || *it=='[' || *it=='(') charstack.push(*it);
else if (*it=='}'){
if(!charstack.empty() && charstack.top()=='{') charstack.pop();
else return false;
}
else if (*it==']'){
if(!charstack.empty() && charstack.top()=='[') charstack.pop();
else return false;
}
else if (*it==')'){
if(!charstack.empty() && charstack.top()=='(') charstack.pop();
else return false;
}
else return false;
it++;
}
if(charstack.empty()) return true;
else return false;
}
};