当前位置: 首页 > article >正文

leetcode-301. 删除无效的括号

题目描述

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。

返回所有可能的结果。答案可以按 任意顺序 返回。

示例 1:

输入:s = "()())()"
输出:["(())()","()()()"]

示例 2:

输入:s = "(a)())()"
输出:["(a())()","(a)()()"]

示例 3:

输入:s = ")("
输出:[""]

思路

回溯+剪枝,参考:. - 力扣(LeetCode)代码使用的是官方第一种解法

1)先遍历字符串,分别找到左,右括号的异常个数

2)写一个函数,用来判断当前字符串是否是有效的括号

3)回溯,先写终止条件;两次的剪枝操作;左,右括号的回溯

ps:加入start变量,是为了每次不重复从索引0开始运行,而是按索引顺序往下回溯

class Solution(object):
    # 判断是否为有效括号
    def isvalid(self, s):
        cnt = 0
        for i in s:
            if i=='(':
                cnt+=1
            elif i==')':
                cnt-=1
                if cnt<0:
                    return False
        return cnt == 0
   # 回溯
    def huisu(self, s,left_remove,right_remove,res,start):
        if left_remove==0 and right_remove==0:
            if self.isvalid(s):
                res.append(s)
            return
        for i in range(start, len(s)):
            if i>0 and s[i]==s[i-1]:
                continue
            if left_remove+right_remove > len(s)-i:
                break
            if left_remove>0 and s[i]=='(':
                self.huisu(s[:i]+s[i+1:],left_remove-1,right_remove,res,i)
            if right_remove>0 and s[i]==')':
                self.huisu(s[:i]+s[i+1:],left_remove,right_remove-1,res,i)
    def removeInvalidParentheses(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        # 找到异常的左右括号数
        res = []
        left_remove = 0
        right_remove = 0
        for i in s:
            if i == '(':
                left_remove+=1
            elif i == ')':
                if left_remove==0:
                    right_remove+=1
                else:
                    left_remove-=1
        # 加入start变量,是为了每次不重复从索引0开始运行,而是按索引顺序往下回溯
        self.huisu(s,left_remove,right_remove,res,0)
        return res


if __name__ == '__main__':
    s = Solution()
    # ss = "()())()"
    # ss=')('
    ss = ")(f"
    print(s.removeInvalidParentheses(ss))

http://www.kler.cn/news/353767.html

相关文章:

  • GaussDB 主备版本8 -schema及操作
  • Windows server 2022 数据中心版本的安装
  • 链接伪类(:hover)CSS背景图片有闪动BUG的解决方法 vue3
  • 【1-1】STM32F407学习笔记之中断
  • error Replace `··` with `↹` react开发格式化问题
  • MybatisWebApp
  • vue综合指南(一)
  • 跨站脚本(XSS)攻击示例概念验证
  • [week1] newstar ctf ezAndroidStudy
  • SpringCloudAlibaba[Nacos]注册配置中心注册与发现服务
  • 【读书笔记-《30天自制操作系统》-30】Day31
  • 计算机网络基础(1)
  • Python单例模式(三种实现方式:覆写__new__方法、使用装饰器、使用元类)(单例模式之线程安全)(单例的懒汉模式与饿汉模式)
  • 【python实操】python小程序之文件操作的JSON读取和JSON修改
  • 在wpf 中 用mvvm 的方式 绑定 鼠标事件
  • Java笔试03
  • Linux 线程概念及线程控制
  • 系统缺失mfc140.dll的修复方法,有效修复错误mfc140.dll详细步骤
  • VLAN概述
  • 阻塞I/O与非阻塞I/O