欢迎光临
我们一直在努力

有效的括号

20.有效的括号https://leetcode.cn/problems/valid-parentheses/

题目

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

1.左括号必须用相同类型的右括号闭合。 2.左括号必须以正确的顺序闭合。 3.每个右括号都有一个对应的相同类型的左括号。

bool isValid(char* s) {

ST stl;
STInit(&stl);
while(*s){
if(*s=='[' || *s=='{' || *s=='(' ){
STPush(&stl,*s);
}else{
if(STEmpty(&stl)){
STDestory(&stl);
return false;
}
char tmp=STTop(&stl);
STPop(&stl);
if((tmp=='[' && *s!=']') || (tmp=='{' && *s!='}') || (tmp=='(' && *s!=')')){
STDestory(&stl);
return false;
}
}
s++;
}
bool ret = STEmpty(&stl);
STDestory(&stl);
return ret;
}

括号匹配的本质是“左括号入栈等待,右括号出栈配对”,右括号必须与最近的、未配对的左括号匹配,且永远不能出现在其对应的左括号之前。栈里只存左括号,右括号只是用来匹配栈顶左括号的“钥匙”,永远不会入栈,所以栈顶永远不可能是右括号。还要考虑只有一个左括号或者左括号数量多于右括号时,这是栈里的左括号不会被消耗完,那么就可以通过判空完成题目

赞(0)
未经允许不得转载:171主机测评 » 有效的括号
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址