您的位置:首页 > 编程语言 > C语言/C++

Leetcode c语言-Valid Parentheses

2017-09-17 22:46 344 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: