zoukankan      html  css  js  c++  java
  • 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
                    
    
  • 相关阅读:
    这几天的读书心得
    随机接入过程的步骤
    从tlb,ocx,dll类型库中提取com组件的CLSID
    unicode字符集下CStdioFile无法写入中文的解决方案
    多线程CString参数传递问题
    yii2.0 报错Cookievalidationkey Must Be Configured With A Secret Key
    windows下的phpunit安装
    xdebug 一直报错 upstream timed out (110: Connection timed out) while reading response header from upstream
    session与cookie
    【转】LVS负载均衡之session解决方案 持久连接
  • 原文地址:https://www.cnblogs.com/itboy-newking/p/10882184.html
Copyright © 2011-2022 走看看