HH_Knight 2020-03-29 12:05 采纳率: 50%
浏览 175
已采纳

小白完全不会,求大佬指点。

一:
如果通过插入“ +”和“ 1”可以从中得到格式正确的数学表达式,则将带括号的序列称为正确的。

例如,序列 "(())()","()"和 "(()(()))"是正确的,而")(","(()))("和"(()" 不是。

定义重新排序操作:选择括号序列的任意连续子段(子字符串),然后以任意方式对其中的所有字符进行重新排序。当重新排序的子段的长度为t时,重新排序操作需要耗时t秒。

例如,对于“))((”,他可以选择子字符串“)(”并重新排序“)()(”(此操作将花费2秒)。

不难看出,重新排序操作不会改变左括号和右括号的数量。

现在,LD想花费最少的时间,通过任意次数(可能为零)执行重新排序操作来使括号序列变成正确的。

输入格式:

1.第一行包含一个整数n(1≤n≤1e6),表示序列的长度;

2.第二行包含一个长度为n的字符串,仅由字符‘(’和‘)’组成。

输出格式:

输出一个整数,表示使括号序列正确的最小秒数;如果不可能实现,则输出-1。

输入样例:

8

))((())(

输出样例:

6

二:
给出一串包含 ( 、 ) 、[ 和 ] 的字符串,字符串在以下三种情况下为合法的:

1 字符串为空;

2 如果A和B都是合法的,那么AB也是合法的;

3 如果A是合法的,那么(A)和[A]也是合法的。

试判断输入的字符串是否合法。

输入格式:

输入包括一串由若干个 ( 、 ) 、 [ 或 ] 组成的字符串,字符串长度不超过100。

输出格式:

如果该字符串合法,输出“Yes”;否则输出“No”。

输入样例:

([])

输出样例:

Yes

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-03-29 12:41
    关注

    第一个问题

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        int n = 0;
        int result = 1;
        char s[100];
        scanf("%s", s);
        for (int i = 0; i < strlen(s); i++)
        {
            if (s[i] == '(') n++;
            if (s[i] == ')') n--;
            if (n < 0) { result = 0; break; }
        }
        if (n!=0) result = 0;
        if (result) printf("YES"); else printf("NO");
        return 0;
    }
    

    第二个问题

    #include <stdio.h>
    #include <string.h>
    
    char conv(char c)
    {
        if (c == ')') return '(';
        if (c == '}') return '{';
        if (c == ']') return '[';
        return 0;
    }
    
    int main()
    {
        char arr[100];
        int n = 0;
        int result = 1;
        char s[100];
        scanf("%s", s);
        for (int i = 0; i < strlen(s); i++)
        {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{')
                arr[n++] = s[i];
            else if (s[i] == ')' || s[i] == ']' || s[i] == '}')
            {
                if (arr[n - 1] != conv(s[i])) { result = 0; break; }
                n--;
            }
        }
        if (n != 0) result = 0;
        if (result) printf("YES"); else printf("NO");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥200 关于#c++#的问题,请各位专家解答!
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀