您的位置:首页 > 其它

九度OJ 1342:寻找最长合法括号序列II (DP)

2015-11-16 20:19 344 查看
时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:898

解决:366

题目描述:假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给你的任务便是去掉其中的一些括号,使得剩下的括号序列能够左右括号匹配且长度最长,即最长的合法括号序列。

输入:测试数据包括多个,每个测试数据只有一行,即一个随机的括号序列,该括号序列的长度保证不超过106。

输出:对于每个测试案例,输出一个整数,表示最后剩下的最长合法括号序列长度。

样例输入:
(())()
(()


样例输出:
6
2


思路:

这个题比1337题简单多了。

计数左括号数目left,遇到左括号则加,右括号则减(left为0则不需要处理)。

右括号减说明遇到了一对括号匹配,count+=2。

最后count就是所求。

代码:

#include <stdio.h>
 
#define N 1000000
 
int main(void)
{
    int i;
    char s[N+1];
    int left, count;
 
    while (scanf("%s", s) != EOF)
    {
        left = count = 0;
        for(i=0; s[i]; i++)
        {
            if (s[i] == '(')
                left ++;
            else if (left > 0)
            {
                left --;
                count += 2;
            }
        }
        printf("%d\n", count);
    }
 
    return 0;
}
/**************************************************************
    Problem: 1342
    User: liangrx06
    Language: C
    Result: Accepted
    Time:30 ms
    Memory:1820 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: