算法

LeetCode1021.两数相加

2021-07-21  本文已影响0人  Timmy_zzh
1.题目描述
示例 1:
输入:s = "(()())(())"
输出:"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。

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

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

提示:
1 <= s.length <= 105
s[i] 为 '(' 或 ')'
s 是一个有效括号字符串

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-outermost-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.解题思路
    public String removeOuterParentheses_v1(String s) {
        StringBuilder result = new StringBuilder();
        int count = 0;
        int lastIndex = 0;

        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (ch == '(') {
                count++;
            } else {
                count--;
            }
            if (count == 0) {
                result.append(s.substring(lastIndex + 1, i));
                lastIndex = i + 1;
            }
        }
        return result.toString();
    }
/**
 * 2.使用栈进行数据保存
 * -遍历字符串,当遍历到左括号-入栈,遇到右括号-出栈,当栈为空时遍历位置为分解点,进行切分截取操作
 */
public String removeOuterParentheses_v2(String s) {
    Stack<Character> stack = new Stack<>();
    StringBuilder result = new StringBuilder();
    int lastIndex = 0;

    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        if (ch == '(') {
            stack.push(ch);
        } else {
            stack.pop();
        }
        if (stack.isEmpty()) {
            result.append(s.substring(lastIndex + 1, i));
            lastIndex = i + 1;
        }
    }
    return result.toString();
}
/**
 * 2。定义int index = 0;变量表示左右括号的数量
 * -遇到左括号index++, index>0 需要将遍历字符添加到结果集中
 * -遇到右括号index--, index>0 也是原语中的字符
 */
public String removeOuterParentheses(String s) {
    StringBuilder result = new StringBuilder();
    int index = 0;
    char[] chars = s.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        char ch = chars[i];
        if (ch == '(') {
            if (index > 0) {
                result.append(ch);
            }
            index++;
        } else {
            index--;
            if (index > 0) {
                result.append(ch);
            }
        }
    }
    return result.toString();
}
3.总结
上一篇下一篇

猜你喜欢

热点阅读