Every day a leetcode
题目来源:20. 有效的括号
解法:栈
本质是括号匹配题,模拟一个栈即可。
代码:
// 返回与')' ']' '}'相匹配的字符
char bracket(char c)
{
switch(c)
{
case ')':
return '(';
case ']':
return '[';
case '}':
return '{';
default:
return 0;
}
}
bool isValid(char * s){
int n=strlen(s);
// 特判
if(n%2==1) return false;
// 初始化一个栈
int stack[n+1],top=-1;
// 遍历字符串s
for(int i=0;i<n;i++)
{
char c=bracket(s[i]);
// s[i]是')' ']' '}'的一种,则c为非0
if(c)
{
// 若栈为空,或匹配失败,返回false
if(top == -1 || stack[top]!=c) return false;
// 匹配成功,栈顶元素退栈
top--;
}
// s[i]不是')' ']' '}'的一种,压入栈
else
{
top++;
stack[top]=s[i];
}
}
// 若栈为空,说明全部匹配成功
if(top == -1) return true;
else return false;
}
结果: