Valid Parentheses

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;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值