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;
}