1.链接: . – 力扣(LeetCode)【点击即可跳转】
思路:
使用 栈 来完成操作
1.左括号– 入栈
2.右括号– 判断出栈顶的左括号与右括号是否匹配
如果匹配–>继续
不匹配–>终止
代码中 栈 的基本实现,不在以下展示,参考上一篇文章。
以下为函数的具体实现:
bool isValid(char* s)
{
ST st;
StackInit(&st);
while(*s !='bool isValid(char* s)
{
ST st;
StackInit(&st);
while(*s !='\0')
{
switch(*s)
{ //左括号
case'{':
case'[':
case'(':
{
StackPush(&st,*s);
++s;
break;
} //右括号
case'}':
case']':
case')':
{
if(StackEmpty(&st))
{
StackDestory(&st);
return false;
}
char top=StackTop(&st);
StackPop(&st);
//不匹配
if((*s=='}'&&top!='{')
||(*s==']'&&top!='[')
||(*s==')'&&top!='('))
{
StackDestory(&st);
return false;
}
else//匹配
{
++s;
}
break;
}
default:
break;
}
}
bool ret=StackEmpty(&st);
StackDestory(&st);
return ret;
}
')
{
switch(*s)
{ //左括号
case'{':
case'[':
case'(':
{
StackPush(&st,*s);
++s;
break;
} //右括号
case'}':
case']':
case')':
{
if(StackEmpty(&st))
{
StackDestory(&st);
return false;
}
char top=StackTop(&st);
StackPop(&st);
//不匹配
if((*s=='}'&&top!='{')
||(*s==']'&&top!='[')
||(*s==')'&&top!='('))
{
StackDestory(&st);
return false;
}
else//匹配
{
++s;
}
break;
}
default:
break;
}
}
bool ret=StackEmpty(&st);
StackDestory(&st);
return ret;
}
谢谢观看,希望对你有所帮助