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

牛群的秘密通信

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

知识点:

栈/字符串

分析:

两种方法:

一、利用一个栈来匹配括号,首先将 s[i] == '('|| s[i] == '{'|| s[i] == '['这些情况都一一压栈,在循环中,如果遇到了“ ) ] } ”,就和栈顶元素进行匹配,成功则继续,有一个不匹配,则整个字符串不匹配。若是循环中都判断结束了,那么最后还需要对栈是否为空进行判断,因为最后成对的括号都要弹出。

二、利用一个栈来匹配括号,但是这种方法的匹配与上面的方法不同,当出现 s[i] == '('|| s[i] == '{'|| s[i] == '['这些情况,将其对应的右半括号“ ) ] } ”压栈,在每一次循环中对当前字符进行判断,若是遍历到了当前栈为空或者是栈顶元素和当前元素不相等,则不是一个匹配的括号字符串,反之就弹出栈顶元素继续遍历。代码会更加简洁一些。

两个算法都是O(N)的时间复杂度

编程语言:

C++

完整代码:

第一种方法代码:

bool is_valid_cow_communication(string s) {
        stack<char> stk;
        for(int i = 0;i<s.length();i++){
            if(s[i] == '(' || s[i] == '{' || s[i] == '[') stk.push(s[i]);
            else{
                if(stk.empty()){
                    return false;
                }
                char curchar = stk.top();stk.pop();
                if(s[i] == '}' && curchar == '{'
                    ||s[i] == ']' && curchar == '['
                    ||s[i] == ')' && curchar == '(')continue;
                    else return false;
 
 
            }
        }
        if(stk.empty()) return true;else return false;
    }

第二种方法代码:

bool is_valid_cow_communication(string s) {
        stack<char> stk;
        for(int i = 0;i<s.length();i++){
            if(s[i] == '{') stk.push('}');
            else if(s[i] == '[') stk.push(']');
            else if(s[i] == '(') stk.push(')');
            else if(stk.empty() || stk.top() != s[i]){
                return false;
            }else stk.pop();
        }
        return true;
    }

第二种方法数组代替STL栈代码:

	char stk[100010];
    int tt = 0;
    bool is_valid_cow_communication(string s) {
        for(int i = 0;i<s.length();i++){
            if(s[i] == '{') stk[++tt] = '}';
            else if(s[i] == '[') stk[++tt] = ']';
            else if(s[i] == '(') stk[++tt] = ')';
            else if(tt <= 0 || stk[tt] != s[i]){
                return false;
            }else tt--;
        }
        return true;
    }

全部评论

相关推荐

有个问题,现在大家都在劝退客户端,客户端岗位也很稀缺,那为什么不去呢,就算干一两年被裁了也可以社招进去吧,人不是同样很少,社招岗位也户会急招人的吧😋😋😋
Runquicky:在前三年客户端还好,主要是因为大厂都在扩张状态。这两年已经不建议了,大厂都只剩维护的需求了,没新功能,自然也没那么多需求。新人进去一两年被裁会怎样很难说了。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-10 15:34
牛客746145331号:没有自知之明,还优中选优上了,单位是有多好?别人优秀的你发了offer别人就会来?别到时候offer全被鸽了又要重新招聘,什么样的公司招什么样的认,不要想着低工资能招个多优秀的人
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务