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


    时间限制: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
    ", count);
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1342
        User: liangrx06
        Language: C
        Result: Accepted
        Time:30 ms
        Memory:1820 kb
    ****************************************************************/


  • 相关阅读:
    js 格式化时间
    javascript Base64 加密解密方法
    为什么给元素添加了z-index却没有效果
    浮动 与 清除浮动
    Vue 介绍 以及 学习总结(这里不详细展开)
    redux 的基础用法
    c# 几种深拷贝方式的比较
    C#四种深拷贝方法
    Innershar C#中Skip和Take的用法
    DataTable.AcceptChanges方法有何用处
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083791.html
Copyright © 2020-2023  润新知