zoukankan      html  css  js  c++  java
  • LeetCode 1021. Remove Outermost Parentheses

    1021. Remove Outermost Parentheses(删除最外层的括号)

    题目: 

      有效括号字符串为空 ("")"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"""()""(())()" 和 "(()(()))" 都是有效的括号字符串。

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

      给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。

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

      示例 1:

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

      示例 2:

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

      示例 3:

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

      提示:

      1.  S.length <= 10000
      2.  S[i] 为 "(" 或 ")"
      3.  S 是一个有效括号字符串

    思路:

      这个题目以前做过的,设定一个flag位为0,对于字符串进行遍历,遇到左括号flag增加,遇到右括号flag减少,当flag重新为0即代表括号到达最外层,满足消去条件,直到检索完字符串。

      (这题我本来使用的是s.charAt(),之后发现性能较差,于是改变使用StringBuilder,用字符数组解决)

    代码:

      

     1     public static String removeOuterParentheses(String S) 
     2     {  
     3         StringBuilder password = new StringBuilder();     
     4         char[] word = S.toCharArray();
     5         int val = 0;
     6         
     7         for(int i = 0; i<word.length;i++)
     8         {      
     9             if(word[i]=='(')
    10             {
    11                 val++;
    12                 if(val!=1) 
    13                     password.append(word[i]);
    14             }
    15             else
    16             {
    17                 val--;
    18                 if(val!=0) 
    19                     password.append(word[i]);
    20             }            
    21         }
    22         return password.toString();
    23     }
    View Code
  • 相关阅读:
    js的单元测试
    如何嵌入HTML 页面
    使用JQuery时间比较
    @page指令ValidateRequest的作用
    时间的正则表达式(比较简单)
    [置顶] Android代码 监控手机电池的状态
    [置顶] Android代码传感器光传感
    [置顶] Android问题ViewPager实现左右两个屏幕的切换
    [置顶] Android代码传感器测试手机支持那几种传感
    [置顶] Android代码检测手机耳机插拔
  • 原文地址:https://www.cnblogs.com/blogxjc/p/10870904.html
Copyright © 2011-2022 走看看