• 移除无效括号


    给你一个由 '('、')' 和小写字母组成的字符串 s。

    你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。

    请返回任意一个合法字符串。

    有效「括号字符串」应当符合以下 任意一条 要求:

    空字符串或只包含小写字母的字符串
    可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」
    可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」
     

    示例 1:

    输入:s = "lee(t(c)o)de)"
    输出:"lee(t(c)o)de"
    解释:"lee(t(co)de)" , "lee(t(c)ode)" 也是一个可行答案。
    示例 2:

    输入:s = "a)b(c)d"
    输出:"ab(c)d"
    示例 3:

    输入:s = "))(("
    输出:""
    解释:空字符串也是有效的
    示例 4:

    输入:s = "(a(b(c)d)"
    输出:"a(b(c)d)"
     

    提示:

    1 <= s.length <= 10^5
    s[i] 可能是 '('、')' 或英文小写字母

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses

    思路很简单,但是吐槽一下他的编译系统,我用string ss=ss+s[i],string s的长度是10^5,愣是给我搞成内存超限,代码调到我怀疑人生

    后来改成ss.push_back(s[i]) 就通过了。。。。。。。。。。。。。。。。。

    string minRemoveToMakeValid(string s)
    {
        stack<int>p;
        string ss;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='(')
                p.push(i);
    
            else if(s[i]==')')
            {
                if(!p.empty())
                    p.pop();
                else
                    s[i]='#';
                
            }
        }
        while(!p.empty())//删除多余的左括号
        {
            s[p.top()]='#';
            p.pop();
        }
    
        for(int i=0;i<s.size();i++)
        {
            if(s[i]!='#')
                ss.push_back(s[i]);
        }
        return ss;
    
    }
  • 相关阅读:
    Interrupt、Interrupted、IsInterrupted
    ReentrantLock
    tcp粘包、拆包
    jstat 分析应用垃圾回收状况
    CopyOnWriteArrayList
    storm基础概念
    余弦距离
    websocket
    awk
    sed
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12498371.html
Copyright © 2020-2023  润新知