博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
九度oj 题目1342:寻找最长合法括号序列II
阅读量:4948 次
发布时间:2019-06-11

本文共 1596 字,大约阅读时间需要 5 分钟。

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

 

转载于:https://www.cnblogs.com/jasonJie/p/5777859.html

你可能感兴趣的文章