ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-25 10:35:51  阅读:150  来源: 互联网

标签:lee 括号 小写字母 示例 字符串 int 移除 1249 Leetcode


在这里插入图片描述
给你一个由 '('、')' 和小写字母组成的字符串 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;
    }
    
};

标签:lee,括号,小写字母,示例,字符串,int,移除,1249,Leetcode
来源: https://www.cnblogs.com/xiaohai123/p/16410833.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有