-
题目描述:
- 假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给你的任务便是去掉其中的一些括号,使得剩下的括号序列能够左右括号匹配且长度最长,即最长的合法括号序列。
-
输入:
- 测试数据包括多个,每个测试数据只有一行,即一个随机的括号序列,该括号序列的长度保证不超过10 6。
-
输出:
- 对于每个测试案例,输出一个整数,表示最后剩下的最长合法括号序列长度。
-
样例输入:
-
(())() (()
-
样例输出:
-
6
2
-
-
-
///
-
这个找匹配的,就是看每一个)之前有没有(,如果有,合法序列就要加2,没有合法序列不变。
-
-
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; char s[1000001]; int main() { char temp; int sum,slen,j,left; while(cin>>s) { slen=strlen(s); sum=0; left=0; for(j=0;j<slen;j++) { if(s[j]=='(') left++; else { if(left) { left--; sum+=2; } } } cout<<sum<<endl; } //system("pause"); return 0; } /************************************************************** Problem: 1342 User: 午夜小白龙 Language: C++ Result: Accepted Time:100 ms Memory:2496 kb ****************************************************************/