LeetCode每日刷题Day6---1021删除最外层的括号+补充优化

1021删除最外层的括号

思路与结果

在这里插入图片描述

代码

思路1

package Day6_4_25.L1021;

public class Solution {
    public String removeOuterParentheses(String S) {
//      变量count用于计数以分割,temp用于标记分割位置
        int count = 0;
        int temp = 0;
//      用可变字符串StringBuilder,把分割好的字符串添加进去。
        StringBuilder sb = new StringBuilder();
//      转成字符数组,进行遍历
        char[] chars = S.toCharArray();
        for (int i = 0; i < chars.length; i++) {
//          进行识别计数,count=0代表着一次分割
            if (chars[i] == '(') {
                count++;
            } else if (chars[i] == ')') {
                count--;
            }
//          先分割,再去头尾,最后添加到StringBuilder里
            if (count == 0) {
                String string = S.substring(temp, i + 1);
                temp = i + 1;
                sb.append(string.substring(1, string.length() - 1));
            }
        }
        return sb.toString();
    }
}

思路2

package Day6_4_25.L1021;

import java.util.Stack;

public class Solution2 {
    public String removeOuterParentheses(String S) {
//      可变字符串、栈对象的创建、字符串转字符数组
        StringBuilder sb = new StringBuilder();
        Stack<Character> stack = new Stack<>();
        char[] chars = S.toCharArray();
//      遍历
        for (char c : chars) {
            if (c == '('){
//              先检测是否为空,不是则添加字符,目的就是  去头尾。
                if (!stack.empty()){
                    sb.append('c');
                }
//              入栈 ( ,也只入栈这个,如果是 ),就代表需要出栈(抵消思路)
                stack.push('(');
            }else if (c == ')'){
//              不为空则代表栈顶有元素,即有 (,那么就出栈(抵消)
                if (!stack.empty()) {
                    stack.pop();
                }
//              出栈后再次判断,还不为空,则添加 ),为空代表着这是最后的),也就是分割点
                if (!stack.empty()){
                    sb.append(')');
                }
            }
        }
        return sb.toString();
    }
}

优化

对于第一种思路,可以通过count=1来判断是否需要将头尾添加到StringBuilder内。简化操作

class Solution {
    public String removeOuterParentheses(String S) {
        StringBuilder str = new StringBuilder("");
        int flag = 0;
        for(char c:S.toCharArray()){
            //flag为0,代表着这是头,跳过去,不加进字符串内
            if(flag == 0){
                flag++;
            }
            else{
                if(c == '('){
                    str.append(c);
                    flag++;
                }
                else if(c == ')'){
                    //flag>1,代表着这不是尾,可以加进字符串。
                    if(flag > 1){
                        str.append(c);
                    }
                    flag--;
                }
            }
        }
        return str.toString();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42252770/article/details/89527126
今日推荐