算法1021. 删除最外层的括号(多语言实现)
Posted 二当家的白帽子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法1021. 删除最外层的括号(多语言实现)相关的知识,希望对你有一定的参考价值。
文章目录
- 1021. 删除最外层的括号:
- 样例 1:
- 样例 2:
- 样例 3:
- 提示:
- 分析
- 题解
- 原题传送门:https://leetcode.cn/problems/remove-outermost-parentheses/
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:
输入:
s = "(()())(())"
输出:
"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
样例 2:
输入:
s = "(()())(())(()(()))"
输出:
"()()()()(())"
解释:
输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
删除每个部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
样例 3:
输入:
s = "()()"
输出:
""
解释:
输入字符串为 "()()",原语化分解得到 "()" + "()",
删除每个部分中的最外层括号后得到 "" + "" = ""。
提示:
- 1 <= s.length <= 1 0 5 10^5 105
s[i]
为'('
或')'
s
是一个有效括号字符串
分析
- 面对这道算法题目,二当家的陷入了沉思。
- 根据题意,先要理解什么是原语。
- 原语本身是有效括号字符串。
- 只要我们能找到原语,那么只需要把头尾字符去掉即可。
题解
rust
impl Solution
pub fn remove_outer_parentheses(s: String) -> String
let mut left = 0;
s.chars().filter(|c| match c
'(' =>
left += 1;
left > 1
,
')' =>
left -= 1;
left > 0
,
_ => false
).collect::<String>()
go
func removeOuterParentheses(s string) string
var ans []rune
left := 0
for _, c := range s
if c == ')'
left--
if left > 0
ans = append(ans, c)
if c == '('
left++
return string(ans)
typescript
function removeOuterParentheses(s: string): string
let ans = "";
let left = 0;
for (const c of s)
if ((c == '(' && ++left > 1) || (c == ')' && --left > 0))
ans += c;
return ans;
;
c
char * removeOuterParentheses(char * s)
int size = 0;
int left = 0;
for (int i = 0; s[i]; ++i)
char c = s[i];
if ((c == '(' && ++left > 1) || (c == ')' && --left > 0))
s[size++] = s[i];
s[size++] = '\\0';
return s;
c++
class Solution
public:
string removeOuterParentheses(string s)
string ans;
int left = 0;
for (char &c: s)
if ((c == '(' && ++left > 1) || (c == ')' && --left > 0))
ans.push_back(c);
return ans;
;
java
class Solution
public String removeOuterParentheses(String s)
StringBuilder ans = new StringBuilder();
int left = 0;
for (char c : s.toCharArray())
if ((c == '(' && ++left > 1) || (c == ')' && --left > 0))
ans.append(c);
return ans.toString();
python
class Solution:
def removeOuterParentheses(self, s: str) -> str:
ans, left = "", 0
for c in s:
if c == ')':
left -= 1
if left:
ans += c
if c == '(':
left += 1
return ans
原题传送门:https://leetcode.cn/problems/remove-outermost-parentheses/
非常感谢你阅读本文~
欢迎【👍点赞】【⭐收藏】【📝评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
以上是关于算法1021. 删除最外层的括号(多语言实现)的主要内容,如果未能解决你的问题,请参考以下文章
算法:移除最外层的括号1021. Remove Outermost Parentheses
LeetCode #1021. Remove Outermost Parentheses 删除最外层的括号