20. Valid Parentheses

bool isValid(char* s)
{
    int length = 0;
    int i = 0;
    int index = 0;
    length = strlen(s);
    printf("length = %d",length);
    if(length == 0)
    {
        return true;
    }
    //如果length为单数,直接返回false
    if(length % 2 == 1)
    {
        return false;
    }
    char stack[length];
    //比较
    for(i = 0;i < length;i ++)
    {
        switch (s[i])
        {
        case ')':
            if((index == 0) || stack[index-1] != '(')
            {
                return false;
            }
            index--;
            break;
        case '}':
            if((index == 0) || stack[index-1] != '{')
            {
                return false;
            }
            index--;
            break;
        case ']':
            if((index == 0) || stack[index-1] != '[')
            {
                return false;
            }
            index--;
            break;
        default:
            stack[index] = s[i];
            index++;
        }
    }
    if(index <= 0)
    {
        return true;
    }
    else
    {
        return false;
    }

}

提交了好多次,终于通过。
参考的思路:
数据结构——括号问题是经典的栈问题。因为这有三种括号,三个之间的嵌套比较复杂,所以不能简单地使用整形int作为判断(左括号++,右括号--),例如“([)]”这要是使用int那么就会判断正确。
算法——利用一个栈,如果是左括号则直接放入,如果是右括号,pop栈顶看是否为对应左括号,否则return false;最后检查栈是否为空。
反思:
1 栈的实现,只需要一个一维数组和一个指向栈顶的变量top,这是栈的两个重要元素。
2 栈可以用来进行验证括号的匹配,验证回文字。
3 判断栈内有没有元素时,一定要注意在自己的程序中top=0为空,还是top<0为空。
4 入栈时,不要忘记top++,出栈时不要忘记top--。

参考资料
1 https://www.cnblogs.com/Xieyang-blog/p/8908748.html

posted @ 2019-03-06 16:29  尚修能的技术博客  阅读(107)  评论(0编辑  收藏  举报