Java&C++题解与拓展——leetcode1021.删除最外层的括号【么的新知识】

101 阅读1分钟
每日一题做题记录,参考官方和三叶的题解

题目要求

在这里插入图片描述

思路:双指针模拟

  • (记为11)记为1-1,遍历字符串,加出来零的时候就说明匹配到了一个原语。

Java

class Solution {
    public String removeOuterParentheses(String s) {
        int n = s.length();
        StringBuilder res = new StringBuilder();
        for(int i = 0, zero = 0; i < n; ) {
            int j = i;
            while(i == j || zero != 0)
                zero += s.charAt(j++) == '(' ? 1 : -1;
            res.append(s.substring(i + 1, j - 1)); //去掉外层括号
            i = j;
            zero = 0;
        }
        return res.toString();
    }
}
  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

C++

class Solution {
public:
    string removeOuterParentheses(string s) {
        int n = s.size();
        string res;
        for(int i = 0, zero = 0; i < n; ) {
            int j = i;
            while(i == j || zero != 0)
                zero += s[j++] == '(' ? 1 : -1;
            res = res + s.substr(i + 1, j - i - 2); //去掉外层括号
            i = j;
            zero = 0;
        }
        return res;
    }
};
  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

Rust

impl Solution {
    pub fn remove_outer_parentheses(s: String) -> String {
        let mut zero = 0;
        s.chars().filter(|ch| match ch {
            '(' => {
                zero += 1;
                zero > 1 // 去掉外层括号
            }
            ')' => {
                zero -= 1;
                zero > 0 // 去掉外层括号
            }
            _ => false
        }).collect::<String>()
    }
}
  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

总结

快乐双指针~

【考试+浪才回来、还好是简单题、忙完这一段、准备开始下一段!】


欢迎指正与讨论!