列表

详情


QY18. 缺失的括号

描述

一个完整的括号字符串定义规则如下:
1、空字符串是完整的。
2、如果s是完整的字符串,那么(s)也是完整的。
3、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。
例如,"(()())", ""和"(())()"是完整的括号字符串,"())(", "()(" 和 ")"是不完整的括号字符串。
牛牛有一个括号字符串s,现在需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请问牛牛至少需要添加多少个括号。

输入描述

输入包括一行,一个括号序列s,序列长度length(1 ≤ length ≤ 50). s中每个字符都是左括号或者右括号,即'('或者')'.

输出描述

输出一个整数,表示最少需要添加的括号数

示例1

输入:

(()(() 

输出:

2 

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2021-12-22

#include<stdio.h>
#include<string.h>
int main(){
    char str[60];
    int i,left=0,right=0,sum=0;
    scanf("%s",str);
    for(i=0;i<strlen(str);i++){
        if(str[i]=='('){
            left++;
        }else{
            right++;
        }
        if(right>left){
            left++;
            sum++;
        }
    }
    sum+=left-right;
    printf("%d",sum);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2021-10-17

int main()
{  char str[1000000];
 gets(str);
 int len=strlen(str);
 int count=0;
 int need=0;
 for(int i=0;i<len;i++)
{ if(count==-1)
{
    need++;
    count=0;
}
    if(str[i]=='(')
        count++;
    else if(str[i]==')')
        count--;
}
 int z=abs(count);
 printf("%d",z+need);

    
    return 0;
}

上一题