求括号的最大深度

给定一个只包含六种括号的字符串,如果字符串无效(括号数量不等或顺序错误),输出0;否则,输出最大的括号嵌套深度。示例中展示了有效和无效字符串的判断及深度计算。

现有一字符串仅由 ‘(‘,’)’,'{‘,’}’,'[‘,’]’六种括号组成。

若字符串满足以下条件之一,则为无效字符串:

①任一类型的左右括号数量不相等;

②存在未按正确顺序(先左后右)闭合的括号。

输出括号的最大嵌套深度,若字符串无效则输出0。

0≤字符串长度≤100000

输入描述:

一个只包括 ‘(‘,’)’,'{‘,’}’,'[‘,’]’的字符串

输出描述:

一个整数,最大的括号深度

示例1  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

[]

输出

1

说明

有效字符串,最大嵌套深度为1

示例2  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

([]{()})

输出

3

说明

有效字符串,最大嵌套深度为3

示例3  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

(]

输出

0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 100001

void fun(char *input,int len)
{
    if (len % 2 != 0) {
        printf("0\n");
        return;
    }

    int maxDep = 0;
    int top = -1;
    int cnt = 0;

    char * stack = malloc(sizeof(char) * (len + 1));
    memset(stack,0,sizeof(char) * (len + 1));

    for(int i = 0; i < len; i++){
        if(top < 0){
            stack[++top] = input[i];
        } else {
            if(stack[top] == '(' && input[i] == ')' || stack[top] == '{' && input[i] == '}' || stack[top] == '[' && input[i] == ']'){
                top--;
                cnt++;
            } else {
                stack[++top] = input[i];
                cnt = 0;
            }
            if(cnt > maxDep){
                maxDep = cnt;
            }
        }
    }
    if (top < 0) {
        memset(stack,0,sizeof(char) * (len + 1));
        printf("%d\n",maxDep);
    } else {
        printf("0\n");
        
    }
    //printf("maxDep:%d stack:%s top:%d\n",maxDep,stack,top);
    return;
}
int main()
{
    char *input = (char *)malloc(sizeof(char) * N);
    memset(input, 0, sizeof(char) * N);
    
    scanf("%s",input);
    int len = strlen(input);
    
    fun(input,len);
    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值