标签:io ar os for on ef amp as tt
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; } };
标签:io ar os for on ef amp as tt
原文地址:http://blog.csdn.net/uj_mosquito/article/details/41801497