1.描述示例
2.思路:
括号有效需要满足每一个右括号都有一个左括号和它唯一对应,及找到右括号时往前查看有没有左括号和它对应,左括号符合先进后出的特性,所以用栈的思路,左括号入栈
3.代码:
char pairs(char a)
{
if(a==')')
{
return '(';
}
if(a==']')
{
return '[';
}
if(a=='}')
{
return '{';
}
return 0;
}
bool isValid(char * s)
{
int n=strlen(s);
int stk[n+1],top=0;
if(n%2!=0)
{
return false;
}
int i=0;
for(i=0;i<n;i++)
{
char ch=pairs(s[i]);
if(ch!=0)
{
if(top==0||stk[top-1]!=ch)
{
return false;
}
top--;
}
else
{
stk[top]=s[i];
top++;
}
}
if(top==0)
{
return true;
}
else
{
return false;
}
}
4.复杂度分析:
时间复杂度:执行n次,所以时间复杂度是O(n)
空间复杂度:O(n+m)
其中n为字符数量,m为左括号数量