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 ...
随机推荐
- [Go] gocron源码阅读-go语言中的切片接口和类型综合
// getCommands func getCommands() []cli.Command { command := cli.Command{ Name: "web", Usa ...
- centos 7下配置阿里yum源
1.打开centos的yum文件夹 cd /etc/yum.repos.d/ 2.用wget下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7. ...
- 5. this关键字
一.this关键字概述 1. this作为对象的引用,它总是指向调用该方法的对象 2. this的最大作用:让类中的一个方法访问该类中的另一个方法或实例变量 二.this关键字的两种用法 1. 在方法 ...
- C语言异常处理
异常的概念-程序在运行过程中可能产生异常-异常(Exception)与Bug的区别 异常是程序运行时可预料的执行分支 Bug是程序中的错误,是不被预期的运行方式 异常(Exception)和Bug的对 ...
- 第十六周博客作业 <西北师范大学| 周安伟>
第十六周作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/10980707 ...
- 【声明式事务】Spring声明式事务实现(三)
以MyBatis为例. 一.基于注解的声明式事务配置 1. 添加tx名字空间 xmlns:tx="http://www.springframework.org/schema/tx" ...
- CSP-S 2019图论总结
CSP-S 2019图论总结 一.最短路问题 模板 Floyd算法 void floyd() { memset(map,0x3f,sizeof(map)); for(int i=1;i<=n;i ...
- 《阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读》--阅读
离线?在阿里搜索工程体系中我们把搜索引擎.在线算分.SearchPlanner等ms级响应用户请求的服务称之为“在线”服务:与之相对应的,将各种来源数据转换处理后送入搜索引擎等“在线”服务的系统统称为 ...
- Python str & repr
Python str & repr repr 更多是用来配合 eval 的 (<- 点击查看),str 更多是用来转换成字符串格式的 str() & repr() str() 和 ...
- 用scanf清空缓冲区 对比fflush
fflush会将缓冲数据打印到屏幕或者输出磁盘,scanf将丢弃. 如上图.