题解 | #有效括号序列#

有效括号序列

https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

// 链式存储实现的栈
#include <cstddef>
#include <cstdlib>
typedef struct LNode {
    char data;
    struct LNode* next;
}* LinkStack, LNode;

// 初始化链栈
bool InitStack(LinkStack& S) {
    // 分配一个头结点
    S = (LNode*)malloc(sizeof(LNode));
    // 内存不够初始化失败
    if (S == NULL) return false;
    // 头结点指向空
    S->next = NULL;
    return true;
}

// 链栈判空
bool StackEmpty(LinkStack S) {
    return S->next == NULL;
}

// 入栈
bool Push(LinkStack& S, char x) {
    // 分配一个结点
    LNode* L = (LNode*)malloc(sizeof(LNode));
    // 内存不够
    if (L == NULL)return false;
    L->data = x;
    // 头结点后没有结点时
    if (S->next == NULL) {
        L->next = NULL;
        S->next = L;
    } else {
        L->next = S->next;
        S->next = L;
    }
    return true;
}

// 出栈
bool Pop(LinkStack& S, char& x) {
    // 判断栈空
    if (StackEmpty(S))return false;
    LNode* n = S->next;
    x = n->data;
    S->next = n->next;
    free(n);
    return true;
}

bool Destroy(LinkStack& S) {
    return true;
}

// 括号匹配
bool bracketCheck(const char* str, int length) {
    // 创建链栈
    LinkStack S;
    InitStack(S);
    // 遍历处理括号
    for (int i = 0; i < length; i++) {
        // 是否是左括号
        if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
            // 是, 入栈
            Push(S, str[i]);
        } else {
            // 是右括号, 检查右括号单身
            if (StackEmpty(S))return false;
            // 检查括号匹配
            char topElem;
            Pop(S, topElem);
            if (str[i] == ')' && topElem != '(')return false;
            if (str[i] == ']' && topElem != '[')return false;
            if (str[i] == '}' && topElem != '{')return false;
        }
    }
    // 如果处理完括号序列, 发现栈非空, 则左括号单身
    return StackEmpty(S);
}
    class Solution {
      public:
        /**
         * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
         *
         *
         * @param s string字符串
         * @return bool布尔型
         */
        bool isValid(string s) {
            // write code here
            if (bracketCheck(s.c_str(), s.length())) {
                return true;
            }
            return false; ;

        }
    };

全部评论

相关推荐

机智的豹子有点心碎:UU我还在找工作还没找到,一直在搜简历怎么改,总结了这些: 1.SEO:简历根据每一个岗位定制化:使用这个岗位中所描述的工作的词,它要求什么技能就把自己的技能描述成什么样子,把SEO用在自己身上(把我的简历和个人特质,当成一个热门产品来做 “搜索引擎优化”),让HR能用最低的门槛看到我 2."顺序:把岗位要求的技能跟经历放在简历的最开头、最显眼的位置" 3.包装:简历是一个最终交付说明书,只要最终学习成长做得到就可以,在合适的范围内自我吹捧(我这个人怎么能够在HR的角度被迅速的看懂和看到,减轻HR的工作压力) 4.每点加小标题​:用6~10字概括该段内容,便于面试官快速抓取信息。 5.避免空泛描述​:拒绝“培养了组织能力”等泛泛而谈,替换为具体行动和成果。 6."使用“三段式结构”​​:每段经历按“为什么做-做了什么-结果如何”展开: ​a) 为什么做​:痛点或目标(例如“品牌声量不足”) ​b) 做​了什么:方法论(例如“趋势洞察+竞品对标+人群细分”) ​c) 结果如何​:量化成果或影响(例如“推动客户投放20万预算”)" 7.量化成果​:用数字体现工作成效(如“整理500+份资料”“撰写2万字报告”)。 这些有的是我想去的岗的,如果对你有用的话按需修改就好~加油,早日上岸!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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