这是小川的第380次更新,第408篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第242题(顺位题号是1021)。有效的括号字符串为空("")"("+ A +")"A + B,其中A和B是有效的括号字符串,+表示字符串连接。例如,"""()""(())()""(()(()))"都是有效的括号字符串。

如果有效的括号字符串S是非空的,并且不存在将其拆分为S = A + B的方法,其中A和B是非空有效括号字符串,则它是原始的。

给定有效的括号字符串S,考虑其原始分解:S = P_1 + P_2 + ... + P_k,其中P_i是原始有效括号字符串。

在去除S的原语分解中的每个原始字符串的最外面的括号后返回S。例如:

输入:"(()())(())"

输出:"()()()"

说明:

输入字符串是"(()())(())",带有原语分解"(()())"+"(())"

删除每个部分的外括号后,"()()" + "()" = "()()()"

输入:"(()())(())(()(()))"

输出:"()()()()(())"

说明:

输入字符串是"(()())(())(()(()))",带原语分解"(()())"+"(())"+"(()(( )))"

删除每个部分的外括号后,"()()" + "()" + "()(())" = "()()()()(())"

输入:"()()"

输出:""

说明:

输入字符串是"()()",原始分解"()"+"()"

删除每个部分的外括号后,""+""=""。

注意

  • S.length <= 10000

  • S[i]"("")"

  • S是一个有效的括号字符串。

02 第一种解法

根据题目的描述和例子来看,是要找到S中的每一个原始有效字符串,然后去掉每个原始有效字符串的外层括号。

S中,左括号"("和右括号")"是成对出现的,即在每一个原始有效字符串中,左括号和右括号的数量是相同的。

思路:从左到右遍历S中的字符,定义两个变量leftright,记录遇到的左括号、右括号的数量,当左括号和右括号的数量相等时,说明遇到了一个原始有效字符串,去掉头尾的括号,借助字符串截取完成,拼接到StringBuilder中。

public String removeOuterParentheses(String S) {
StringBuilder sb = new StringBuilder();
int left = 0, right = 0, index = 0;
int n = S.length();
for (int i=0; i<n; i++) {
if (S.charAt(i) == '(') {
left++;
} else if (S.charAt(i) == ')') {
right++;
}
if (left == right) {
sb.append(S.substring(index+1, i));
index = i + 1;
}
}
return sb.toString();
}

03 第二种解法

思路和上面第一种解法类似,只是没有借助两个变量来计数,而是使用一个变量count,遇到左括号就加1,遇到右括号就减1,但是最开始的左括号和最后边的右括号时不能拼接进去的,所以当遇到左括号且count等于1的时候,要进入下一次循环,当遇到右括号且count等于0的时候,表明当前这个原始有效字符串中的括号已经遍历完了,需要进入下一次循环。

public String removeOuterParentheses2(String S) {
StringBuilder sb = new StringBuilder();
int count = 0, n = S.length();
for (int i=0; i<n; i++) {
if (S.charAt(i) == '(') {
count++;
if (count == 1) {
continue;
}
} else if(S.charAt(i) == ')') {
count--;
if (count == 0) {
continue;
}
}
sb.append(S.charAt(i));
}
return sb.toString();
}

04 小结

算法专题目前已连续日更超过七个月,算法题文章248+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode.1021-删除最外面的括号(Remove Outermost Parentheses)的更多相关文章

  1. LeetCode 1021. 删除最外层的括号(Remove Outermost Parentheses)

    1021. 删除最外层的括号 1021. Remove Outermost Parentheses 题目描述 有效括号字符串为空 ("")."(" + A + ...

  2. [Swift]LeetCode1021. 删除最外层的括号 | Remove Outermost Parentheses

    A valid parentheses string is either empty (""), "(" + A + ")", or A + ...

  3. leetcode 1021. 删除最外层的括号

    问题描述 有效括号字符串为空 ("")."(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的 ...

  4. Leetcode之回溯法专题-22. 括号生成(Generate Parentheses)

    Leetcode之回溯法专题-22. 括号生成(Generate Parentheses) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n ...

  5. 【Leetcode_easy】1021. Remove Outermost Parentheses

    problem 1021. Remove Outermost Parentheses 参考 1. Leetcode_easy_1021. Remove Outermost Parentheses; 完

  6. LeetCode--To Lower Case && Remove Outermost Parentheses (Easy)

    709. To Lower Case(Easy)# Implement function ToLowerCase() that has a string parameter str, and retu ...

  7. 1021. Remove Outermost Parentheses删除最外层的括号

    网址:https://leetcode.com/problems/remove-outermost-parentheses/ 使用栈的思想,选择合适的判断时机 class Solution { pub ...

  8. Leetcode 5016. 删除最外层的括号

    5016. 删除最外层的括号  显示英文描述 我的提交返回竞赛   用户通过次数446 用户尝试次数469 通过次数456 提交次数577 题目难度Easy 有效括号字符串为空 ("&quo ...

  9. 【leetcode】1021. Remove Outermost Parentheses

    题目如下: A valid parentheses string is either empty (""), "(" + A + ")", ...

随机推荐

  1. 权限和ACL访问控制-02-特殊权限

    X(大写) X:给目录x权限,不给文件x权限(当文件本来就有x权限的话会重新赋予x权限) 例如: chmod -R +X dir2 SUID SUID属性一般运用在可执行文件上,当用户执行该执行文件时 ...

  2. 免费自动化测试工具Katalon Studio入门

    Katalon Studio 一.简介: Katalon Studio 是一个在网页应用.移动和网页服务方面功能强大的自动化测试解决方案.基于 Selenium 和 Appium 框架,Katalon ...

  3. BZOJ1257 [CQOI2007]余数之和[规律]

    被zcr和yy轮流嘲讽了一番,感觉自己智商日渐下降...\TヘTツ 先拆mod变成整数除法,然后就是$nk- \Sigma_{i=1}^{n} i * \lfloor \frac{k}{i} \rfl ...

  4. 【CF160E】Buses and People

    题目大意:给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a<a', b'<b, c'<c 的最小 c 对应的元组编号. ...

  5. DevExpress ASP.NET Core v19.1版本亮点:数据网格和树列表

    行业领先的.NET界面控件DevExpress 发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExpress ASP.NET Core Controls v19.1中新增的一些控件及增强 ...

  6. 扩展Puppet – 建立Puppet CA集群

    扩展Puppet – 建立Puppet CA集群  (1 votes, average: 5.00 out of 5) 588 views 2012 年 3 月 4 日Puppet.运维ca.mast ...

  7. DevExpress实现为TextEdit设置水印文字的方法

    设置水印与消除水印 public static void SetWatermark(TextEdit textEdit, string watermark) { textEdit.Properties ...

  8. Oracle体系结构2

    Buffer Cache 作用:缓存dbf中的数据 例子:A和B重复访问同一张表的几率是很大的,如果每次访问dbf时都要发生物理IO,这样会导致数据库的性能非常低 由于这个例子,当一个进程访问dbf时 ...

  9. socket认证客户端链接合法性

    服务器端: #_*_coding:utf-8_*_ __author__ = 'Linhaifeng' from socket import * import hmac,os secret_key=b ...

  10. hdu 5695 百度熊教体育 拓扑排序 好题

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...