20. 有效的括号
用数组模拟顺序栈,因为需要匹配的符号组是给定了,我提交的版本中用的是ASCALL码来的。
记得考虑左多余,右多余就行
也可以用下面一行的方式判断,再不济就把需要匹配的存数组里面,然后进去找吧。
stack[top]=='{'&&s[i]=='}'||stack[top]=='['&&s[i]==']'||stack[top]=='('&&s[i]==')'
bool isValid(char * s){
int length=strlen(s),top=-1,i;
char *stack=(int *)malloc(sizeof(char)*length);
for(i=0;i<length;i++){
if(s[i]=='('||s[i]=='{'||s[i]=='[')//压栈
stack[++top]=s[i];
else if(top==-1)//栈底为空,还有右括号压栈
return false;
else if(s[i]==stack[top]+1||s[i]==stack[top]+2)//配对成功
stack[top--]='0';
else
return false;
}
return top==-1;//循环结束,左括号有多余的
}