Leetcode 1249. 移除无效的括号(牛逼,终于做出来了)
Published on 2022-06-25 10:07 in 暂未分类 with 萧海~

Leetcode 1249. 移除无效的括号(牛逼,终于做出来了)

    在这里插入图片描述
    给你一个由 '('、')' 和小写字母组成的字符串 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 = "))(("
    输出:""
    解释:空字符串也是有效的

    提示:

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

    主要思路:自定义一个结构体,用来记录'('和‘)’的位置信息
    然后删除有效的括号,最后剩下的就是多余的'('和')',然后从原始字符串遍历,跳过这些多余的括号就是答案。
    Code:

    class Solution {
    public:
    string minRemoveToMakeValid(string s) {
    typedef struct
    {
    char temp;
    int pos;
    }param;
    vector<param>vec;
    for(int i=0;i<s.length();i++)
    {
    if(s[i]=='(' || s[i]==')')
    {
    param p;
    p.temp=s[i];
    p.pos=i;
    vec.push_back(p);//记录括号信息
    }
    }
    if(vec.size()==0)
    return s;
    //以下步骤是删除有效的括号
    vector<param>vec2;//这个数组最后剩下的不合法的括号信息
    for(int i=0;i<vec.size();i++)
    {
    if(vec2.size()==0)
    {
    vec2.push_back(vec[i]);
    continue;
    }
    param p=vec2.back();
    if(p.temp=='(')
    {
    if(vec[i].temp==')')
    {
    vec2.pop_back();
    cout<<"-++"<<endl;
    }
    else
    vec2.push_back(vec[i]);
    }
    else
    {
    vec2.push_back(vec[i]);
    }
    }
    for(int i=0;i<vec2.size();i++)
    {
    cout<<vec2[i].pos<<endl;
    }
    int loop=0;
    string res;
    for(int i=0;i<s.length();i++)
    {
    if( (loop!=vec2.size())&& i==vec2[loop].pos )
    {
    loop++;
    }
    else
    {
    res+=s[i];
    }
    }
    cout<<"res="<<res<<endl;
    return res;
    }
    };
    posted @   萧海~  阅读(65)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 终于写完轮子一部分:tcp代理 了,记录一下
    · 震惊!C++程序真的从main开始吗?99%的程序员都答错了
    · 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
    · 单元测试从入门到精通
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    点击右上角即可分享
    微信分享提示
    电磁波切换