您的位置:首页 > 其它

LeetCode每日一题 001 有效的括号

2019-02-27 21:51 169 查看

1、解题思路

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

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

2、有效题解

[code]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、小结

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: