一、题目描述
给定一个字符串,只包含三种括号字符,需要确认是否有效。
二、思路
1.初始化栈,并入栈输入串的第一个字符
2.从输入串的第二个字符到最后一个字符,依次与栈顶元素对比,栈不为空且栈顶元素与字符匹配则出栈,否则入栈该字符
3.操作完最后一个字符后,如果栈为空(即有进必有出,各个局部均对称),则输入合法
三、C代码
bool isValid(char * s){
int len = strlen(s);
int limit = len / 2;
char *stack = (char *)malloc(sizeof(char) * limit);
int index = 0;
for(int i = 0; i < len; ++i)
{
char cur = s[i];
if(cur == '(' || cur == '[' || cur == '{')
{
if(index == limit) return false;
stack[index++] = cur;
}
else
{
if(index == 0) return false;
if(cur == ')' && stack[index-1] == '(' || cur == ']' && stack[index-1] == '[' || cur == '}' && stack[index-1] == '{')
{
index--;
}
else
{
return false;
}
}
}
free(stack);
return index == 0;
}