您的位置:首页 > 编程语言 > C语言/C++

LeetCode 20 有效的括号 c语言

2019-04-01 20:34 316 查看

要处理的表达式可以包含三种不同类型的括号:(),{} , []
eg.
(((((()))))) – VALID
()()()() – VALID
(((((((() – INVALID
((()(()))) – VALID

算法:
1.初始化栈 S。
2.一次处理表达式的每个括号。
3.如果遇到开括号,我们只需将其推到栈上即可。这意味着我们将稍后处理它,让我们简单地转到前面的子表达式
4.如果我们遇到一个闭括号,那么我们检查栈顶的元素。如果栈顶的元素是一个相同类型的左括号,那么我们将它从栈中弹出并继续处理。否则,这意味着表达式无效。
5.如果到最后我们剩下的栈中仍然有元素,那么这意味着表达式无效。

bool isValid(char* s) {
if( s == NULL )
return false;
char *stack = (char *) malloc( sizeof(char) * ( strlen(s)+1 ) );
int top = 0;
for( int i = 0; s[i] != '\0'; i++)
{
if(s[i] == '(' || s[i]=='[' || s[i]=='{') //左括号入栈
stack[++top] = s[i];                  //top = top + 1
else if( (s[i]==')'&&stack[top]=='(') ||
(s[i]==']'&&stack[top]=='[') ||
(s[i]=='}'&&stack[top]=='{')    ) //右括号比对
top--;
else    //比对失败
return false;
}

///////删掉可以通过编译
if( stack != NULL)
{
free(stack);
stack = NULL;
}
///////删掉可以通过编译

if(top == 0)  //字符串结束且栈空
return true;
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: