思路解析(使用栈):
-
使用一个栈来保存左括号。
-
每当遇到一个右括号时,检查栈顶元素是否是匹配的左括号。
-
如果匹配,则弹出栈顶元素;
-
如果不匹配或者栈为空,则说明无效;
-
-
最后如果栈为空,说明全部括号匹配成功。
#define MAX 100000
bool isValid(char* s) {
char stack[MAX];
int top = -1;
for(int i = 0; s[i] != '\0'; i++)
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
{
if(top < MAX - 1)
{
stack[++ top] = s[i];
}
else
{
return false; //栈满
}
}
else if (s[i] == ')' || s[i] == ']' || s[i] == '}')
{
if(top == -1)
{
return false;
}
else if ((s[i] == ')' && stack[top] == '(') || (s[i] == ']' && stack[top] == '[') || (s[i] == '}' && stack[top] == '{'))
{
top--;
}
else
{
return false;
}
}
else
{
return false;
}
}
return top == -1;
}