码迷,mamicode.com
首页 > 其他好文 > 详细

九度oj 题目1342:寻找最长合法括号序列II

时间:2016-08-16 21:56:18      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:
假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给你的任务便是去掉其中的一些括号,使得剩下的括号序列能够左右括号匹配且长度最长,即最长的合法括号序列。
输入:
测试数据包括多个,每个测试数据只有一行,即一个随机的括号序列,该括号序列的长度保证不超过106
输出:
对于每个测试案例,输出一个整数,表示最后剩下的最长合法括号序列长度。
样例输入:
(())()
(()
样例输出:
6
2

这个题和1337求的是不一样的
代码如下
 1 #include <iostream>
 2 #include <cstring>
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 using namespace std;
 6  
 7 char str[1000002];
 8 int main(int argc,char* argv[])
 9 {
10     while(scanf("%s",str)!= EOF) {
11  
12         int temp = 0;
13         int len = strlen(str);
14         int ans = 0;
15         for(int i = 0; i < len; i++) {
16             if(str[i] == () {
17                 temp++;
18             }
19             else if(str[i] == )) {
20                 temp--;
21                 if(temp < 0) {
22                     temp = 0;
23                 }
24                 else {
25                     ans += 2;
26                 }
27             }
28         }
29          
30         printf("%d\n",ans);
31     }
32     return 0;
33 }

代码其实可以这样精简

 1 #include <stdio.h>
 2 
 3 char str[1000002];
 4 int main(int argc,char* argv[])
 5 {
 6     while(scanf("%s",str)!= EOF) {
 7         int temp = 0;
 8         int ans = 0;
 9         for(int i = 0; str[i]; i++) {
10             if(str[i] == () {
11                 temp++;
12             }
13             else if(temp > 0) {
14                 temp--;
15                 ans += 2;
16             }
17         }
18         
19         printf("%d\n",ans);
20     }
21     return 0;
22 }

 

九度oj 题目1342:寻找最长合法括号序列II

标签:

原文地址:http://www.cnblogs.com/jasonJie/p/5777859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!