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;
}
};

最新文章

  1. Jmeter中通过BeanShell获取当前时间
  2. CSS3凹凸字
  3. Windows Store App 应用程序安装目录
  4. [转]浅谈https\ssl\数字证书
  5. 图像色彩空间YUV和RGB的差别
  6. Windows8下如何使用命令行--转载
  7. 转载:MyEclipse中防止代码格式化时出现换行的情况的设置
  8. laravel观察者模式
  9. ATMEGA16 IOport相关汇总
  10. ecma6的学习好网站
  11. Yii2框架---GII自动生成
  12. C语言中,隐藏结构体的细节
  13. Gradle、Gradle Wrapper与Android Plugin for Gradle
  14. asp.net core系列 28 EF模型配置(字段,构造函数,拥有实体类型)
  15. 利用jvisualvm使用btrace进行线上调试案例
  16. 搭建前端监控系统(三)NodeJs服务器部署篇
  17. Git 配置环境及常用命令整理
  18. 【BZOJ】3683: Falsita
  19. 对微软Microsoft Dynamics CRM 的认识
  20. fastadmin iframe 表单提交之后跳转

热门文章

  1. Python爬虫实战二之爬取百度贴吧帖子
  2. 1.spring.net Look-up Method 查找方法的注入(方法是抽象的需要spring.net注入)
  3. UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe6 in position 12: ordinal not in range(128)问题解决
  4. https hsts 私密链接
  5. 前端实用软件: Markdown工具之---Typora实用技巧(总结)
  6. UVa 11324 The Largest Clique (强连通分量+DP)
  7. Spark 0.9.1和Shark 0.9.1分布式安装指南
  8. Alpha冲刺(七)
  9. 在ie6下将png24图片透明
  10. How can i use iptables on centos 7 or fedora?