题解 | #最长的括号子串#

最长的括号子串

https://www.nowcoder.com/practice/45fd68024a4c4e97a8d6c45fc61dc6ad

#include <algorithm>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return int整型
     */
    bool canpop(char a, char b) {
        return (a == '{' && b == '}') || (a == '[' && b == ']') || (a == '(' &&
                b == ')');
    }
    int longestValidParentheses(string s) {

        vector<bool> legalsubstrs(s.length(), false);
        cout << endl;
        stack<char> stk;
        stack<int> stkindex;
        for (int j = 0; j < s.length(); j++) {
            if (s[j] == '{' || s[j] == '[' || s[j] == '(') {
                stk.push(s[j]);
                stkindex.push(j);
            } else {
                if (stk.empty() || !canpop(stk.top(), s[j])) {
                    stk.push(s[j]);
                    stkindex.push(j);
                } else {
                    stk.pop();
                    int legalindex = stkindex.top();
                    stkindex.pop();
                    legalsubstrs[j] = true;
                    legalsubstrs[legalindex] = true;
                }
            }
        }
        int maxLength = 0;
        int curLength = 0;
        for (auto u : legalsubstrs) {
            if (u) {
                curLength++;
            } else {
                curLength = 0;
            }
            if (curLength > maxLength) {
                maxLength = curLength;
            }
        }
        return maxLength;
    }
};

先用栈,标记所有成对括号,然后再找标记数组(这里用vector<bool>,其实也就是bitset)里面最长连续为1的序列

全部评论

相关推荐

xdm怎么说&nbsp;要被拷打了&nbsp;担心是KPI
丹田:面就完了,就当日薪四位数的大佬免费给给你面试。
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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