现有一字符串仅由 ‘(‘,’)’,'{‘,’}’,'[‘,’]’六种括号组成。
若字符串满足以下条件之一,则为无效字符串:
①任一类型的左右括号数量不相等;
②存在未按正确顺序(先左后右)闭合的括号。
输出括号的最大嵌套深度,若字符串无效则输出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;
}
给定一个只包含六种括号的字符串,如果字符串无效(括号数量不等或顺序错误),输出0;否则,输出最大的括号嵌套深度。示例中展示了有效和无效字符串的判断及深度计算。
688

被折叠的 条评论
为什么被折叠?



