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

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:898

解决:366

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


你可能感兴趣的:(dp,C语言,OJ,九度)