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

Posted pd-yin996649850

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔试题------移除无效的括号相关的知识,希望对你有一定的参考价值。

给你一个由 ‘(‘、‘)‘ 和小写字母组成的字符串 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 };

 

 

以上是关于笔试题------移除无效的括号的主要内容,如果未能解决你的问题,请参考以下文章

java笔试题

网易2017秋招笔试题3:最长公共子括号序列长度

矩阵乘法计算量估算, 华为笔试题

leetcode-161周赛-5249-移除无效的括号

数据结构与算法之深入解析“移除无效的括号”的求解思路与算法示例

嵌入式c笔试题(整理)