给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
栈(先进后出)
int
match(char a)
{
if (a == ')')
{
return '(';
}
if (a == ']')
{
return '[';
}
if (a == '}')
{
return '{';
}
return 0;
}
bool isValid(char * s)
{
int nums = strlen (s);
// 显然奇数无法完全匹配,排除奇数数列
if (nums % 2 == 1)
{
return false;
}
// 建栈, 初始化栈
int stk[nums + 1];
int top = 0;
int i;
for (i = 0; i < nums; i ++)
{
char ch = match (s[i]);
// 当扫描到右括号时
if (ch != 0)
{
if (top == 0||stk[top - 1] != ch)
{
return false;
}
// 出栈
top --;
}
// 将左括号入栈
else
{
stk [top ++] = s[i]; 、、
}
}
// 实际上是 top 的值为零则栈内字符匹配完成
return true;
}