码迷,mamicode.com
首页 > 其他好文 > 详细

笔试题------移除无效的括号

时间:2020-03-14 23:47:52      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:使用   string   排序   要求   tom   stack   包含   就是   移除   

给你一个由 ‘(‘、‘)‘ 和小写字母组成的字符串 s。
你需要从字符串中删除最少数目的 ‘(‘ 或者 ‘)‘ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。
请返回任意一个合法字符串。
有效「括号字符串」应当符合以下 任意一条 要求:

 空字符串或只包含小写字母的字符串
 可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」
 可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」
 
输入:s="lee(t(c)o)de)
输出:“lee(t(c)o)de
 
输入:s="))(("
输出:“”
 
思路:使用栈(stack)的方法解决这个问题,因为字符串中包括char和int将他们依次入栈。同时将配对的有效括号出栈,最好剩下的就是无效括号以及其索引,
再用剩下的索引在原字符串中删除对应的括号
 
 1 class Solution{
 2 public:
 3     string minRemoveToMakeValid(string s){
 4     stack<pair<char,int>>ss;
 5     for(int i=0;i<s.size();i++){
 6         pair<char,int>t;        //排序先排char再排int类型
 7         t.first=s[i];
 8         t.second=i;
 9         if(!ss.empty()){
10             if(ss.top().first==(&&t.first==)){
11                 ss.pop();
12                 continue;
13         }
14 }
15     
16             if(t.first==(){
17             ss.push(t);
18             continue;
19 }
20 }        if(t.first==(||t.first==)){
21             ss.push(t);
22 }
23 }
24         while(!ss.empty()){
25         s.erase(s.begin()+ss.top().second);
26         ss.pop();
27 }
28 return s;
29 }
30 };

 

 

笔试题------移除无效的括号

标签:使用   string   排序   要求   tom   stack   包含   就是   移除   

原文地址:https://www.cnblogs.com/PD-yin996649850/p/12495024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!