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; } };
分类:
C/C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理