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

牛群的秘密通信

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;
    }

全部评论

相关推荐

04-16 10:27
已编辑
美团_Saas_后端开发
今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,拿到美团offer那会感觉自己天都亮了。没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
饼子吃到撑:学院本是这样的,找工作拼运气,你技术再好人家筛选学历照样沉入海底,海投就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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