题解 | #有效括号序列#
有效括号序列
https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2
/* 遇到的问题:以为“”也算在s里了,以“作为字符串结尾。 栈的数组大小太小了。 思路:我们使用栈 将符号分成 '(,{, ['和'),},]' 当遇到'(,{, ['则入栈,等待要匹配的另一半。 如果遇到了'),},]'匹配则输出此时栈的顶部(pop)反之匹配有误。 直到为空--匹配都。 函数: push---入栈 pop---删除栈顶 top---查询栈顶 */ #include <stdbool.h> static char stack[100000]={0}; static int stacknum=-1; void push(char value) { stacknum++; stack[stacknum]=value; } void pop() { if(stacknum>=0) { stack[stacknum]=0; stacknum--; } } char top() { char res=stack[stacknum]; return res; } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return bool布尔型 */ bool isValid(char* s ) { // write code here for(int i=0;;i++) { if(s[i]=='\0')break;//全部判断ok switch(s[i]) { case '(':push('(');break; case ')':if(top()=='(') pop(); else return false; break; case '[':push('[');break; case ']':if(top()=='[') pop(); else return false; break; case '{':push('{');break; case '}':if(top()=='{') pop(); else return false; break; default:break; } } //栈空 if(stacknum==-1) return true; else return false; }