给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
整体思路解析
利用栈的特点能存储数据就把左括号全都放入栈里面,然后看是否有右括号相匹配的如果有就返回true反之就返回false。
栈的代码在这里:利用顺序表对栈的实现-CSDN博客
代码展示:
bool isValid(char* s) {
ST ps;
STInit(&ps);
while(*s)
{
if(*s=='('
||*s=='{'
||*s=='[')
{
STPush(&ps,*s);
}
else
{if(STEmpty(&ps))
{
return false;
}
char top=STTop(&ps);
STPop(&ps);
if(top!='('&&*s==')'
||top!='{'&&*s=='}'
||top!='['&&*s==']')
{
return false;
}
}
s++;
}
if(!STEmpty(&ps))
return false;
STDestroy(&ps);
return true;
}