笔试题------移除无效的括号
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 };
以上是关于笔试题------移除无效的括号的主要内容,如果未能解决你的问题,请参考以下文章