递归:
int bracket(char *p, int count)
{
if (*p == '\0')
return count;
else if (*p == '(')
return bracket(p + 1, count++);
else if (count > 0 && *p == ')')
return bracket(p + 1, count--);
else if (count <= 0 && *p == ')')
return -1;
return bracket(p + 1, count);
}
非递归:(可以包含多种括号)
bool match(char a,char b)
{
if(a=='('&&b==')')
return true;
if(a=='['&&b==']')
return true;
if(a=='{'&&b=='}')
return true;
return false;
}
bool Bice(char* s)
{
int i,n=strlen(s),top=-1;
char *st=new char[n];
for(i=0;i<n;i++)
{
if(s[i]==')'||s[i]==']'||s[i]=='}')
{
if(top>=0&&match(st[top],s[i]))
top--;
else
return false;
}
else if(s[i]=='('||s[i]=='['||s[i]=='{')
st[++top]=s[i];
}
if(top==-1)
return true;
return false;
}