//用栈实现,可以参考用栈实现逆波兰表示法
bool isValid(char * s){
//首先如果字符串的长度不是偶数,说明又有一个是没有左括号或右括号
int len;
len=strlen(s);
char stack[len+1];
int top=0,i,flag=1;
if(len%2!=0||s[0]==')'||s[0]=='}'||s[0]==']'){//如果字符串第一个是右括号,就不可能右与之匹配的左括号
return false;
}
//用栈,像逆波兰栈的实现一样
for(i=0;i<len;++i){
//判断如果是左括号就入栈
if(s[i]=='('||s[i]=='['||s[i]=='{'){//检查第一个只有是左括号才能入栈
stack[top]=s[i];
top++;//入栈后++
}
else
{
if(top>0){//栈不为空
flag=match(stack[top-1],s[i]);//需要确定栈的前一个元素是否和这个元素可以匹配起来
if(flag==0){
return false;//不能匹配说明括号不符合
}
else
{
top--;//如果匹配,则栈顶元素出栈,因为上面++了
}
}
else{
return false;//不能小于零
}
}
}
if(top==0)//栈顶为0是,说明已经全部完全匹配
return true;
else
return false;
}
int match(char*a,char*b)
{
if(a=='('&&b==')')
return 1;
if(a=='['&&b==']')
return 1;
if(a=='{'&&b=='}')
return 1;
else
return 0;
}
leetcode第20题
于 2022-02-05 17:55:25 首次发布