1021--RemoveOutermostParentheses
public class RemoveOutermostParentheses {
/*
解法一:栈,( 进栈,) 出栈,栈为空时,则找到原语,然后去括号。
*/
public String removeOuterParentheses(String S) {
StringBuilder sb=new StringBuilder();
Stack<Character> stack=new Stack<>();
int start=0; int end=0;
for (int i=0;i<S.length();i++){
char c=S.charAt(i);
if (c=='('){
stack.push(c);
}
if (c==')'){
stack.pop();
if (stack.isEmpty()){
end=i;
sb.append(S.substring(start+1,end));
start=end+1;
}
}
}
return sb.toString();
}
/*
解法二:数字标记代替栈,从上面的代码中,我发现,栈起的作用并不是需要特定的括号,而只是判断是否为空来找原语。
而进栈出栈又消耗时间,所以可以用一个整数来代替栈。
*/
public String removeOuterParentheses2(String S) {
StringBuilder sb=new StringBuilder();
int flag=0;
int start=0; int end=0;
for (int i=0;i<S.length();i++){
char c=S.charAt(i);
if (c=='('){
flag++;
}
if (c==')'){
flag--;
if (flag==0){
end=i;
sb.append(S.substring(start+1,end));
start=end+1;
}
}
}
return sb.toString();
}
/*
解法三:解法二优化:分析发现,并不需要用end来标记末尾,直接用i就可以了,快了1ms;
*/
public String removeOuterParentheses3(String S) {
StringBuilder sb=new StringBuilder();
int start=0;
int flag=0;
for (int i=0;i<S.length();i++){
char c=S.charAt(i);
if (c=='('){
flag++;
}
if (c==')'){
flag--;
if (flag==0){
sb.append(S.substring(start+1,i));
start=i+1;
}
}
}
return sb.toString();
}
/*
解法四:最优解:判断的原理是和上面的一样的,但是上面的代码都是找到一个原语后,在原字符串上进行切割,比较费时间。
下面是挨个字符判断,如果满足条件,则直接添加。
*/
public String removeOuterParentheses4(String S) {
StringBuilder sb=new StringBuilder();
int currentDepth=0;
for (char c:S.toCharArray()){
if (c=='('&&(currentDepth +=1)>1) sb.append(c);
else if (c==')'&&(currentDepth -=1)>=1) sb.append(c);
}
return sb.toString();
}
}
1021--RemoveOutermostParentheses的更多相关文章
- LeetCode 1021. 删除最外层的括号(Remove Outermost Parentheses)
1021. 删除最外层的括号 1021. Remove Outermost Parentheses 题目描述 有效括号字符串为空 ("")."(" + A + ...
- Code[VS]1021 玛丽卡题解
Code[VS]1021 玛丽卡题解 SPFA Algorithm 题目传送门:http://codevs.cn/problem/1021/ 题目描述 Description 麦克找了个新女朋友,玛丽 ...
- Codevs 1021 玛丽卡
Codevs 1021 玛丽卡 题目地址:http://codevs.cn/problem/1021/ 题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他 ...
- OJ-上海交大-1021. 从前有座山
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- 1021: A除以B
1021: A除以B 时间限制: 1 Sec 内存限制: 128 MB提交: 263 解决: 189[提交][状态][讨论版] 题目描述 本题要求计算A/B,其中A是不超过1000位的正整数,B是 ...
- PAT乙级 1021. 个位数统计 (15)
1021. 个位数统计 (15) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个k位整数N = dk-1 ...
- 51nod 1021 石子归并(dp)
51nod 1021 石子归并 题解:从i到j合并的最小值:dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]); 最 ...
- 【BZOJ】【1021】【SHOI2008】Dept循环的债务
DP 去膜拜题解了>_>玛雅原来是动规…… 让我先理解一下为什么要用动规:这个题根据钱数推方案其实是无从下手的……(线性规划?……事实证明我想多了) 啦-我们先来看个超级简化版的问题:怎么 ...
- 51nod 1021 石头归并
1021 石子归并 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 N堆石子摆成一条线.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合 ...
- PAT 1021
1021. Deepest Root (25) A graph which is connected and acyclic can be considered a tree. The height ...
随机推荐
- Multi-touch (MT) Protocol 小结
1, 两种多点触摸协议: A类: 处理无关联的接触: 用于直接发送原始数据: B类: 处理跟踪识别类的接触: 通过事件slot发送相关联的独立接触更新. 2, 触摸协议的使用: A类协议: A类协议在 ...
- [Go] 利用channel形成管道沟通循环内外
这个要解决的问题是,比如如果有一个大循环,取自一个大的文件,要进行逻辑处理,那么这个逻辑的代码要放在循环每一行的循环体里面,这样有可能会出现一个for循环的逻辑嵌套,一层又一层,类似俄罗斯套娃.如果放 ...
- Centos 7 编译安装mariadb 5.5
一.环境 OS :Linux 3.10.0-693.el7.x86_64 mariadb下载地址: ]# wget https://downloads.mariadb.org/interstitial ...
- mysql autocommit
当autocommit为开启状态时,即使没有手动start transaction开启事务,mysql默认也会将用户的操作当做事务即时提交(自动帮我们 db.commit()) autocommit开 ...
- 密度聚类 - DBSCAN算法
参考资料:python机器学习库sklearn——DBSCAN密度聚类, Python实现DBScan import numpy as np from sklearn.cluster impo ...
- jquery和bootstrap:
事件:绑定bind和解绑unbind: $('选择器').bind('事件',function(){ // 操作 }) $('选择器').unbind('事件') $('选择器').c ...
- 创建testng.xml文件
简单介绍 运行TestNG测试脚本有两种方式:一种是直接通过IDE运行(例如使用eclipse中的“Run TestNG tests”),另一种是从命令行运行(通过使用xml配置文件).当我们想执行某 ...
- Linux下MongoDB安装和配置(二)
1. 下载MongoDB 下载地址:https://www.mongodb.com/download-center/community 这里选择的是:mongodb-linux-x86_64-4.0. ...
- Codeforces Round #552 (Div. 3) EFG(链表+set,dp,枚举公因数)
E https://codeforces.com/contest/1154/problem/E 题意 一个大小为n(1e6)的数组\(a[i]\)(n),两个人轮流选数,先找到当前数组中最大的数然后选 ...
- WordPress更改“固定链接”后 ,页面出现404的解决方法
一.Web服务器对应的是Nginx 解决方案:修改linux服务器下Nginx的配置文件,目录为:/usr/local/nginx/conf/nginx.conf, 也可以直接使用命令nginx -t ...