1021. 删除最外层的括号

地址:https://leetcode-cn.com/problems/remove-outermost-parentheses/

<?php
/**
1021. 删除最外层的括号
有效括号字符串为空 ("")、"(" + 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:

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

    /**
     * @param String $S
     * @return String
     */
    function removeOuterParentheses($S) {
        $num = 0;
        $s = '';

        for ($i = 0, $length = strlen($S); $i < $length; $i++) {

            if ($S[$i] == '(' && ++$num > 1) {
                $s .= '(';
            }
            if ($S[$i] == ')' && --$num > 0) {
                $s .= ')';
            }
        }

        return $s;
    }
}

$solution = new Solution();
$str = "()()";
var_dump($solution->removeOuterParentheses($str));

/*
 $i = 0 num = 1
 $i = 1 num = 2  (
 $i = 2 num = 1  ()
 $i = 3 num = 2  ()(
 $i = 4 num = 1  ()()
 $i = 5 num = 0  ()()
 $i = 6 num = 1  ()()
 $i = 7 num = 2  ()()(
 $i = 8 num = 1  ()()()
 $i = 9 num = 0  ()()()

 */

 

posted @ 2020-08-26 16:29  花花妹子。  阅读(117)  评论(0编辑  收藏  举报