LeetCode.1021-删除最外面的括号(Remove Outermost Parentheses)
这是小川的第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中的字符,定义两个变量left
和right
,记录遇到的左括号、右括号的数量,当左括号和右括号的数量相等时,说明遇到了一个原始有效字符串,去掉头尾的括号,借助字符串截取完成,拼接到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)的更多相关文章
- LeetCode 1021. 删除最外层的括号(Remove Outermost Parentheses)
1021. 删除最外层的括号 1021. Remove Outermost Parentheses 题目描述 有效括号字符串为空 ("")."(" + A + ...
- [Swift]LeetCode1021. 删除最外层的括号 | Remove Outermost Parentheses
A valid parentheses string is either empty (""), "(" + A + ")", or A + ...
- leetcode 1021. 删除最外层的括号
问题描述 有效括号字符串为空 ("")."(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的 ...
- Leetcode之回溯法专题-22. 括号生成(Generate Parentheses)
Leetcode之回溯法专题-22. 括号生成(Generate Parentheses) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n ...
- 【Leetcode_easy】1021. Remove Outermost Parentheses
problem 1021. Remove Outermost Parentheses 参考 1. Leetcode_easy_1021. Remove Outermost Parentheses; 完
- LeetCode--To Lower Case && Remove Outermost Parentheses (Easy)
709. To Lower Case(Easy)# Implement function ToLowerCase() that has a string parameter str, and retu ...
- 1021. Remove Outermost Parentheses删除最外层的括号
网址:https://leetcode.com/problems/remove-outermost-parentheses/ 使用栈的思想,选择合适的判断时机 class Solution { pub ...
- Leetcode 5016. 删除最外层的括号
5016. 删除最外层的括号 显示英文描述 我的提交返回竞赛 用户通过次数446 用户尝试次数469 通过次数456 提交次数577 题目难度Easy 有效括号字符串为空 ("&quo ...
- 【leetcode】1021. Remove Outermost Parentheses
题目如下: A valid parentheses string is either empty (""), "(" + A + ")", ...
随机推荐
- STM32CubeIDE查看内存使用情况
按照下图操作 在右下角即可显示
- 前端面试题-CSS优先级
一.选择器优先级 浏览器通过优先级来判断哪一些属性值与一个元素最为相关,从而在该元素上应用这些属性值.优先级是基于不同种类选择器组成的匹配规则. 二.优先级计算 优先级就是分配给指定的CSS声明的一个 ...
- #415 Div2 Problem C Do you want a data? (math && 前后缀和 && 快速幂)
题意: 首先定义集合的F值为 这个集合里面最大值和最小值的差. 现给出一个拥有n个数的集合(没有相同的元素), 要求求出这个集合内所有子集的F的值的和.例如: {4.7}这个集合里面有子集{4}.{ ...
- 格子游戏x(并查集)
格子游戏 [问题描述] Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边: 直到围成一个封闭的圈( ...
- js 获取系统时间:年月日 星期 时分秒(动态)
最近再写一个纯html页面,有时间和天气的数据,天气后台给接口,时间要自己获取,我就自己弄了下, <div class="basic"></div> 这是放 ...
- JavaScript插件制作-tab选项卡
JavaScript插件制作练习-鼠标划过选项卡切换图片 <!DOCTYPE html> <html> <head> <meta charset=" ...
- R_Studio(学生成绩)对数值型数据进行统计量分析
对“Gary.csv”中的成绩数据进行统计量分析 基础数据分析 均值 中位数 极差 标准差 变异系数 1/4分位数 3/4分位数 四分位间距... ...分析 setwd('D:\\data' ...
- Linux-expect脚本-1
expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示: 首行加上/usr/bin/expect spawn: 后面加上需要执行的shell命令,比如说spawn sudo ...
- C++入门经典-例4.7-变量的作用域
1:代码如下: // 4.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- Eclipse控制台输出中文乱码问题的解决
啥都不说,上图: 1.console控制台打印乱码 2.右键: Run As --> Run Configurations 3.找到common项,在“Encoding”栏,看到当前用的是默认“ ...