• leecode练习--1021、删除最外层的括号


    leecode练习--1021、删除最外层的括号

    题目要求:

    1、"""()""(())()""(()(()))" 都是有效的括号字符串。

    2、如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 AB 都是非空有效括号字符串。

    3、对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S

    4、例子:

    输入:"(()())(())(()(()))"
    输出:"()()()()(())"
    解释:
    输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
    删除每隔部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
    

    解题思路:

    注意:题目中所输入的字符串默认只有()括号字符,不要死钻牛角尖,认为字符串中还有其他字符

    题目要求是将最外层括号删除,我们需要遍历每个字符,将最外层的括号通过索引和计数来一一删除

    我们可以通过定义一个变量 R 来锁定最外层右括号的位置,当遍历到左括号时,它就加一,遍历到右括号时则减一,当它为为0时,就删除这个位置上的字符

    当只有上述变量时,我们只能删除最外层右括号,所以我们需要定义另一个变量 L 来锁定最外层左括号的位置。当遍历到左括号时,L加一,遍历到右括号时则不发生任何变动,当L为1时,删除当前位置上的字符,当R为0时,L也归零

    我们将每一次遍历后留下来的字符加到一个新定义的字符串变量中,最后将它就是我们需要的答案

    代码实现:

    class Solution:
        def removeOuterParentheses(self, S: str) -> str:
            R = 0
            L = 0
            nS = ''
            for c in S:
                if c == '(':  #遍历到左括号时
                    R += 1     
                    L += 1
      			else:              
                    R -=1
                if R > 0 and L > 1: #逆向思维:只要R不是0且L不为1就留下字符
                    nS += c
                if R == 0:    #如果R为0,说明新的外层左括号要到了
                    L = 0     #为删除最外层左括号,L必须归零
              return nS
                    
    
  • 相关阅读:
    HTML音频/视频DOM 参考手册
    HTML5 应用程序缓存 和 视频
    HTML 5 新的Input类型
    快速开发平台消息通知中心之短信发送
    设计模式之单例设计模式
    反射
    多线程之线程安全
    01-sql优化及索引
    多线程之线程状态
    shell/linux定时清理日志文件
  • 原文地址:https://www.cnblogs.com/itboy-newking/p/10882184.html
Copyright © 2020-2023  润新知