合法的括号匹配

20. Valid Parenthese



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.

Subscribe to see which companies asked this question

题目大概就是这三种括号的匹配,主要的利用Stack的先进后出的原理来进行匹配,看代码应该一下就明白了

typedef struct stack {
    char c;
    struct stack   *next;
} Stack;

void create(Stack **ptop)
{
    *ptop = NULL;
}

void push(Stack **ptop, char c)
{
    Stack   *tmp;
    
    tmp = malloc(sizeof *tmp);
    tmp->c = c;
    tmp->next = *ptop;
    
    *ptop = tmp;
}

void pop(Stack **ptop, char *c)
{
    Stack   *tmp;
    
    if (! *ptop) return;
    
    tmp = *ptop;
    *c = tmp->c;
    *ptop = (*ptop)->next;
    free(tmp);
}

int empty(Stack **ptop)
{
   return *ptop == NULL; 
}

bool isValid(char* s) {
    Stack   *ss;
    char    c;
    
    create(&ss);
    while (*s) {
        switch (*s) {
        case '(':
        case '[':
        case '{':
            push(&ss, *s);
            break;
        case ')':
        case ']':
        case '}':
            if (empty(&ss)) return 0;
            pop(&ss, &c);
            if (c + 1 != *s
                && c + 2 != *s) return 0;
            break;
        default:
            break;
        }
        ++s;
    }
    
    if (!empty(&ss)) return 0;
    return 1;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值