LeetCode每日一题 001 有效的括号

1、解题思路

从前往后,依次看每个括号字符能否找到匹配的另一半(规则是就近配对),只要某一个括号字符找到了另一半就将这一对括号从字符串序列里移除,剩下的字符串序列再做配对。

这种方式下,只要尚未配对的括号字符都要进行记录,以参与后续的配对。未配对记录(入栈),配对移除(出栈)这个过程和栈的入栈出栈操作是一致的了,因此可以用栈来解决。

2、有效题解

bool isMatchedChars(char left, char right)
{
    return (left == '(' && right == ')')
        || (left == '{' && right == '}')
        || (left == '[' && right == ']');
    
}
bool isValid(char* s) {
    if (NULL == s)
    {
        return false;
    }
    if (*s == '\0')
    {
        return true;
    }
    
    char stack[10000] = {0};
    int count = 1;
    stack[0] = *s;
    char *p = s;
    while (*p != '\0' && *(p + 1) != '\0')
    {
        if (count == 0 || !isMatchedChars(stack[count-1], *(p+1)))
        {
            stack[count] = *(p+1);
            count++;
        }
        else
        {
            stack[count-1] = 0;
            count--;
        }
        
        p++; 
    }
    return count == 0;
}

3、小结

配对问题借助栈解决有很好的效果

相关文章: