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

牛群的秘密通信

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

题解 | 牛群的秘密通信

语言: C++

知识点:

分析: 对输入的字符串进行遍历,遍历过程中若当前是左括号则入栈;当前是右括号,则将其与栈顶的左括号进行匹配:若匹配成功,则将匹配过的左括号(当前栈顶元素)出栈;若匹配不成功,则直接返回false。在遍历过程中遇到当前为右括号而此时栈为空的情况,则表示此右括号无法匹配,直接返回false。最终遍历完整个字符串后:若此时栈不为空,表示仍有左括号未被匹配,则返回false;否则即为全部括号都匹配成功,返回true

代码实现:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool is_valid_cow_communication(string s) {
        stack<char> sk; // 使用栈存储左括号
        for(int i = 0; i < s.size(); i++)
        {
            if(s[i] == '(' || s[i] == '[' || s[i] == '{')
            {
                sk.push(s[i]); // 遇到左括号则入栈
            }
            else // 遇到右括号
            {
                char t;
                if(!sk.empty())
                {
                    t = sk.top(); // 若栈不空,则将栈顶左括号取出用于匹配
                }
                else
                {
                    return false; // 若栈空,表示没有与该右括号匹配的左括号,返回false
                }
                if(s[i] == ')' && t == '(' || s[i] == ']' && t == '[' || s[i] == '}' && t == '{')
                {
                    sk.pop(); // 若左右括号匹配成功,将匹配过的左括号出栈
                }
                else
                {
                    return false; // 若匹配不成功,返回false
                }
            }
        }
        if(!sk.empty())
        {
            return false; // 若最终遍历完后栈中还有剩余的左括号,也需返回false
        }
        else
        {
            return true; // 最终所有条件均满足返回true
        }
    }
};
全部评论

相关推荐

头像
02-26 13:58
门头沟学院 Java
北城_阿亮:把八股背一背,包装一下实习经历项目经历,要是有心思考证就考一考,然后把别人的项目爬到自己github上,包装到简历里,什么三个月?一个月!
点赞 评论 收藏
分享
zhiyog:哈哈哈,其实是津巴布韦币
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务