题解 | #牛群的秘密通信#
牛群的秘密通信
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题目,