题解 | #牛群的秘密通信#

牛群的秘密通信

https://www.nowcoder.com/practice/f0047999594d4cd39f85d7347c6941af

考察知识点:栈,队列

解题分析:

这题可以这么理解,左右括号是成对出现的,那么左括号必定会有一个对应的右括号,而且循序应该是一样的,那么我们可以使用栈来解这题(本题可以吧tmp_s当成一个栈,count当成栈顶的指针)

1、首先把属于{, [, (全部都放入到一个数组tmp_s中存储

2、当我们遇到}, ],, )时,就从数组tmp_s中获取最后一个符号和当前的符号做对比,如果括号是成对的情况下,tmp_s的值会和当前的值形成一个闭合的括号

3、如果tmp_s的值和当前的值不能形成一个闭合括号的话,就可以断定这个字符串s的括号不成对出现

编程语言:C

完整的编码代码:如下所示:

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param s string字符串 
 * @return bool布尔型
 */
bool is_valid_cow_communication(char* s ) {
    char tmp_s[1000] = {0};
    int count = 0;
    int len = strlen(s);
    bool flag = true;

    for (int i = 0; i < len; i++) {
        if (s[i] == '{' || s[i] == '[' || s[i] == '(') {	// 将属于左括号的符号写入数组tmp_s中,并更新数组tmp_s的最后一个符号的位置
            tmp_s[count++] = s[i];
        } else if (s[i] == '}' || s[i] == ']' || s[i] == ')') {		// 如果遇到右括号的符号,就从tmp_s中取出最后一个值和当前的s[i]做比较,如果不能成对,那就断定字符串s的括号不成对
            if (s[i] == '}' && tmp_s[count-1] == '{') {
                tmp_s[count--] = '\0';
            } else if (s[i] == ']' && tmp_s[count-1] == '[') {
                tmp_s[count--] = '\0';
            } else if (s[i] == ')' && tmp_s[count-1] == '(') {
                tmp_s[count--] = '\0';
            } else {
                flag = false;
                break;
            }
        }
    }

    return flag;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务