Leetcode c语言-Valid Parentheses

Title:

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.

这道题对于学习过算法的人而言非常简单,是一个非常典型的栈的应用,先入后出,但是对于没有接触过栈的应用的同学,这道题可能会让他们绞尽脑汁。可能最后可以做出来,但肯定也非常复杂。

那么如何利用栈来做这道题,举个例子:([]),首先是存数据,第一个stack[0]存‘(’,然后判断第二个是不是对应的')',如果是的话,那么就是匹配的,那么栈的深度0减1。如果不是的话,是[,那么栈深度+1,第二个stack存'[',然后接着判断第三个,发现是']',与第二个对应,那么匹配,栈的深度减1,也就是消除了之前第二个存的[,也就是现在栈只剩'('。然后判断第四个),发现和第一个'('对应,那么栈的深度-1,也就是0-1=-1。也就是判断如果最后的栈的深度为-1,那么说明全部匹配,返回true。


运用栈的最大的优点是,可以消除那些已经匹配的,这样就能保证,上下两个一定是要对应的,否则不符合valid,返回false。

solution:

bool isValid(char* s) {
    char stack[1000000];
    int top=-1;
    int len=0;
    
    while(s[len]) {
        if (s[len]==')') {
            if (top>=0 && stack[top]=='(')
                top--;
            else
                return false;
        }
        else if (s[len]==']') {
            if (top>=0 && stack[top]=='[')
                top--;
            else
                return false;
        }
        else if (s[len]=='}') {
            if (top>=0 && stack[top]=='{')
                top--;
            else
                return false;
        }
        else {
            top=top+1;
            stack[top]=s[len];
        }
        
        len++;
    }
    return top==-1;
}


posted on 2017-09-17 22:46  sichenzhao  阅读(145)  评论(0编辑  收藏  举报

导航