@[力扣–C语言实现有效的括号]
题目
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
key:遇见右括号,从栈顶(数组最后一位)开始依次匹配
代码
bool isValid(char * s){
int n = strlen(s);
if(n % 2 == 1)
{
return false; /*奇数直接输出false*/
}
char str[n];
int top = 0;
for(int i=0 ;i < n ; i++)
{
char ch = s[i];
if(ch)
{
if(ch == '{')
{
str[top++] = '}'; /*遇到左括号,数组里加入对应的右括号*/
}
else if(ch == '[')
{
str[top++] = ']'; /*遇到左括号,数组里加入对应的右括号*/
}
else if(ch =='(')
{
str[top++] = ')'; /*遇到左括号,数组里加入对应的右括号*/
}
/* 若top == 0且此时遇到了右括号,输出false 若遇到右括号时,数组最后(栈顶) 跟括号不匹配,输出false,若匹配,则该符号已匹配,取出对应字符即可进行其余匹配*/
else
{
if(top == 0 || str[--top] != ch)
{
return false;
}
}
}
}
if(top == 0)
{
return true;
}
return false;
}