题解 | #有效括号序列#

有效括号序列

http://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

消消乐做法,能配对,则消除

//检查配对的函数
char check(char pre){
    if(pre==')'){
        return '(';
    }
    if(pre=='}'){
        return '{';
    }
    if(pre==']'){
        return '[';
    }
    return 0;
}

bool isValid(char* s ) {
	//只要能成功配对,则字符串长度必为偶数
    if(strlen(s)%2!=0){
        return 0;
    }
    //初始化一个字符串数组做栈
    char* stack;
    int top=0;
    stack=(char*)malloc(sizeof(char)*strlen(s));
    //遍历字符串s
    for(int i=0;i<strlen(s);i++){
        //如果是左括号,则入栈
        if(s[i]=='('||s[i]=='{'||s[i]=='['){
            stack[top++]=s[i];
        }
        //如果是右括号
        if(s[i]==')'||s[i]=='}'||s[i]==']'){
            //如果栈还是空,则说明配对错误,还没有左括号就有了右括号
            if(top<1){
                return 0;
            }
            //检查当前右括号与已经入栈的前一个字符能否配对
            if(stack[top-1]==check(s[i])){
                //如果能配对,则将配对的左括号消除,字符数组栈同样的位置置空
                stack[--top]='\0';
            }
        }
    }
    //整个s遍历结束后,如果栈中还有元素,说明有没配对的字符,返回0
    if(strlen(stack)!=0){
        return 0;
    }else{//如果栈空,说明都配对成功
        return 1;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 17:17
点赞 评论 收藏
分享
想按时下班的大菠萝在...:隔壁学校的,加油多投, 实在不好找可以下个学期开学找,把算法八股准备好,项目有空再换换
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务