Leetcode 856. Score of Parentheses 括号得分(栈)
2024-09-24 19:43:48
Leetcode 856. Score of Parentheses 括号得分(栈)
题目描述
字符串S包含平衡的括号(即左右必定匹配),使用下面的规则计算得分
()
得1分AB
得A+B的分,比如()()
得2分(A)
得2A分, 比如(()())
得2(1+1)分
测试样例
Example 1:
Input: "()"
Output: 1
Example 2:
Input: "(())"
Output: 2
Example 3:
Input: "()()"
Output: 2
Example 4:
Input: "(()(()))"
Output: 6
详细分析
简而言之,遇到右括号就一直出栈并累加到一个值直到遇到左括号,这个累加值就表示这对括号的得分。如此周而复始到字符串结尾即可。
具体言之,遇到 ( 就入栈,这里入一个毒药值-1,然后遇到 ) 就一直出栈,累加到score,直到遇到毒药值-1,最后把累加的score入栈,表示这对括号的最终得分。
最后计算栈中的结果之和即可。至于为什么是栈结果和而不是栈顶一个值是因为输入可能是()()
,这种,最后栈中是| 1 | 1 |
。
算法实现
class Solution {
public:
int scoreOfParentheses(string S) {
stack<int> s;
int i=0;
while(S[i]!=0){
if(S[i]=='('){
s.push(-1);
}else if(S[i]==')'){
int score = 0;
if(s.top()==-1){
s.pop();
s.push(1);
}else{
while(!s.empty()){
int t = s.top();
if(t==-1){
s.pop();
s.push(score);
break;
}
score+= t*2;
s.pop();
}
}
}
i++;
}
int result = 0;
while(!s.empty()){
result += s.top();
s.pop();
}
return result;
}
};
最新文章
- Jmeter中通过BeanShell获取当前时间
- CSS3凹凸字
- Windows Store App 应用程序安装目录
- [转]浅谈https\ssl\数字证书
- 图像色彩空间YUV和RGB的差别
- Windows8下如何使用命令行--转载
- 转载:MyEclipse中防止代码格式化时出现换行的情况的设置
- laravel观察者模式
- ATMEGA16 IOport相关汇总
- ecma6的学习好网站
- Yii2框架---GII自动生成
- C语言中,隐藏结构体的细节
- Gradle、Gradle Wrapper与Android Plugin for Gradle
- asp.net core系列 28 EF模型配置(字段,构造函数,拥有实体类型)
- 利用jvisualvm使用btrace进行线上调试案例
- 搭建前端监控系统(三)NodeJs服务器部署篇
- Git 配置环境及常用命令整理
- 【BZOJ】3683: Falsita
- 对微软Microsoft Dynamics CRM 的认识
- fastadmin iframe 表单提交之后跳转
热门文章
- Python爬虫实战二之爬取百度贴吧帖子
- 1.spring.net Look-up Method 查找方法的注入(方法是抽象的需要spring.net注入)
- UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe6 in position 12: ordinal not in range(128)问题解决
- https hsts 私密链接
- 前端实用软件: Markdown工具之---Typora实用技巧(总结)
- UVa 11324 The Largest Clique (强连通分量+DP)
- Spark 0.9.1和Shark 0.9.1分布式安装指南
- Alpha冲刺(七)
- 在ie6下将png24图片透明
- How can i use iptables on centos 7 or fedora?