bool isValid(char* s)
{
int length = 0;
int i = 0;
int index = 0;
length = strlen(s);
printf("length = %d",length);
if(length == 0)
{
return true;
}
//如果length为单数,直接返回false
if(length % 2 == 1)
{
return false;
}
char stack[length];
//比较
for(i = 0;i < length;i ++)
{
switch (s[i])
{
case ')':
if((index == 0) || stack[index-1] != '(')
{
return false;
}
index--;
break;
case '}':
if((index == 0) || stack[index-1] != '{')
{
return false;
}
index--;
break;
case ']':
if((index == 0) || stack[index-1] != '[')
{
return false;
}
index--;
break;
default:
stack[index] = s[i];
index++;
}
}
if(index <= 0)
{
return true;
}
else
{
return false;
}
}
提交了好多次,终于通过。
参考的思路:
数据结构——括号问题是经典的栈问题。因为这有三种括号,三个之间的嵌套比较复杂,所以不能简单地使用整形int作为判断(左括号++,右括号--),例如“([)]”这要是使用int那么就会判断正确。
算法——利用一个栈,如果是左括号则直接放入,如果是右括号,pop栈顶看是否为对应左括号,否则return false;最后检查栈是否为空。
反思:
1 栈的实现,只需要一个一维数组和一个指向栈顶的变量top,这是栈的两个重要元素。
2 栈可以用来进行验证括号的匹配,验证回文字。
3 判断栈内有没有元素时,一定要注意在自己的程序中top=0为空,还是top<0为空。
4 入栈时,不要忘记top++,出栈时不要忘记top--。