zoukankan      html  css  js  c++  java
  • 移除无效括号

    给你一个由 '('、')' 和小写字母组成的字符串 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;
    
    }
  • 相关阅读:
    Ubuntu之:解决屏幕亮度不能调节
    memcached全面剖析–2.理解memcached的内存存储
    并发学习之:多线程编程中条件变量和虚假唤醒的讨论
    ps aux指令详解
    设置中文粗体
    利用SWIG转换C++接口到Java接口
    Dialog
    Ubuntu NDK编译C/C++库
    Android SQLiteConstraintException: error code 19: constraint failed
    ANdroid跟新客户端
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12498371.html
Copyright © 2011-2022 走看看