栈的基本操作:
入栈:
int top=0;
top++; //top指针永远指向栈顶元素
arr[top]=s[i];
出栈:
top--;
判断栈是否为空:
如果top==0,则栈为空;
否则栈不为空;
这道题的思路就是,遍历数组时,遇到左括号则入栈,
当遇到右括号时,如果取栈顶元素能够匹配,那么则把栈顶元素出栈,然后继续遍历,如果遇到右括号,但取栈顶元素不匹配,那么则说明这个括号是不匹配的,则结束,return false。
最后遍历完之后则判断栈是否为空,如果为空,则说明全部括号匹配成功;如果不为空,则说明匹配不成功。
下面是代码:
bool isValid(char * s){
char arr[100004];
int length=strlen(s);
int top=0;
int i;
for(i=0;i<length;i++){
if(s[i]=='('||s[i]=='{'||s[i]=='['){
top++;
arr[top]=s[i];
}
else if(s[i]==']'&&arr[top]=='['||s[i]=='}'&&arr[top]=='{'||s[i]==')'&&arr[top]=='('){
top--;
}
else{
return false;
}
}
if(top==0){
return true;
}else{
return false;
}
}