leetcode 301. 删除无效的括号

这篇具有很好参考价值的文章主要介绍了leetcode 301. 删除无效的括号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.题目

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。
返回所有可能的结果。答案可以按 任意顺序 返回。

2.示例

1)示例 1:
输入:s = “()())()”
输出:[“(())()”,“()()()”]

2)示例 2:
输入:s = “(a)())()”
输出:[“(a())()”,“(a)()()”]

3)示例 3:
输入:s = “)(”
输出:[“”]

4)提示:
1 <= s.length <= 25
s 由小写英文字母以及括号 ‘(’ 和 ‘)’ 组成
s 中至多含 20 个括号

3.分析

使用dfs去搜索当前字符是否要删除,并用栈去维护,看当前字符串是否合法即可

4.代码

class Solution {
public:
stack kh;
int ans=0;
vector sum1,ans1;
map<string,int> map1;
int sum_r[31];
void make_delete(int pos,string s1,string s){
if(poss.size()){
if(!kh.empty()) return;
if(s1.size()>ans)
ans=s1.size();
sum1.push_back(s1);
return;
}
if(s[pos]>=‘a’&&s[pos]<=‘z’){
make_delete(pos+1,s1+s[pos],s);
return;
}
if(s[pos]
‘(’){
kh.push(‘(’);
if(sum_r[pos+1]>=kh.size())
make_delete(pos+1,s1+‘(’,s);
kh.pop();
make_delete(pos+1,s1,s);
}
else{
if(kh.empty())
make_delete(pos+1,s1,s);
else{
if(kh.top()!=‘(’) make_delete(pos+1,s1,s);
else{
make_delete(pos+1,s1,s);
kh.pop();
make_delete(pos+1,s1+‘)’,s);
kh.push(‘(’);
}
}
}
}
vector removeInvalidParentheses(string s) {
memset(sum_r,0,sizeof(sum_r));
for(int i=s.size()-1;i>=0;i–)
sum_r[i]=sum_r[i+1]+(s[i]==‘)’);
make_delete(0,“”,s);
for(int i=0;i<sum1.size();i++)
if(sum1[i].size()==ans&&map1.count(sum1[i])==0){
ans1.push_back(sum1[i]);
map1[sum1[i]]=1;
}
return ans1;
}
};文章来源地址https://www.toymoban.com/news/detail-486254.html

到了这里,关于leetcode 301. 删除无效的括号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法训练day11Leetcode20有效的括号1047删除字符串中所有相邻重复项150逆波兰表达式求值

    https://leetcode.cn/problems/valid-parentheses/description/ https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7.html 判断右括号后忘记pop 括号匹配是使用栈解决的经典问题。 如果还记得编译原理的话,编译器在 词法分析的过程中处理括号、花括号等这个符号的逻辑,也是使用了栈

    2024年01月17日
    浏览(76)
  • Leetcode日记 9. 回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

    给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是。 示例 1: 输入:x = 121 输出:true 示例 2: 输入:x = -121 输出:false 解释:从左向右读, 为 -121 。

    2024年02月21日
    浏览(39)
  • Leetcode | 有效的括号、最长有效括号

    给定一个只包括  \\\'(\\\' , \\\')\\\' , \\\'{\\\' , \\\'}\\\' , \\\'[\\\' , \\\']\\\'  的字符串  s  ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 1: 示例 2: 示例 3: 提示: 1

    2024年02月14日
    浏览(44)
  • 【LeetCode题目详解】24.两两交换链表中的节点19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II day4(补)

      给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 这道题建议使用 虚拟头结点 ,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。 接下来就是

    2024年02月15日
    浏览(43)
  • Matlab错误:表达式无效。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。

    错误:表达式无效。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。 原因:选中了matlab右侧工作区的变量空间,叉掉去即可。  

    2024年02月16日
    浏览(66)
  • LeetCode——有效的括号

    这里,我提供一种用栈来解决的方法: 思路:栈的结构是先进后出,这样我们就可以模拟栈结构了,如果是‘(’、‘{’、‘[’任何一种,直接push进栈就可以了,如果是‘}’、‘)’、‘]’任何一种就开始判断,看栈pop的是否和对应的字符匹配。    下面是源码:    

    2024年02月11日
    浏览(49)
  • [Leetcode] 0020. 有效的括号

    点击上方,跳转至leetcode 给定一个只包括 \\\'(\\\' , \\\')\\\' , \\\'{\\\' , \\\'}\\\' , \\\'[\\\' , \\\']\\\'  的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 1: 示例 2:

    2024年02月10日
    浏览(45)
  • leetcode 20.有效的括号

    🌟 leetcode链接: 有效的括号 1️⃣ 代码与思路: 栈问题: 左括号进栈,如果是右括号则拿出栈顶元素比较,相同弹出栈顶元素,接着继续比较,不相同返回 false ,还要考虑一些特殊情况,具体看如下代码。 注:由于C语言没有接口,所以手写了一套栈来使用。或者也可以使

    2024年02月13日
    浏览(50)
  • Leetcode—22.括号生成【中等】

    之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

    2024年01月23日
    浏览(81)
  • 【数据结构】顺序栈的基本操作:出栈、入栈、取栈顶元素、输出所有栈中元素、括号匹配题目

    栈是限定仅在表位进行插入或删除操作的线性表。栈的表尾称为栈顶,表头称为栈底。不含元素的栈称为空栈。 左图为栈的示意图,右图为用铁路调度表示栈。 如下是入栈至栈满再进行出栈的过程示意图。值得注意的是,栈满后,top指针指向的不是顶端元素,而是顶端的下

    2024年02月07日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包