| 每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路:双指针模拟
- 把
(记为,)记为,遍历字符串,加出来零的时候就说明匹配到了一个原语。
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();
}
}
- 时间复杂度:
- 空间复杂度:
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;
}
};
- 时间复杂度:
- 空间复杂度:
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>()
}
}
- 时间复杂度:
- 空间复杂度:
总结
快乐双指针~
【考试+浪才回来、还好是简单题、忙完这一段、准备开始下一段!】
| 欢迎指正与讨论! |