12. 最大括号深度

ops/2024/12/22 16:39:07/

题目描述

现有一字符串仅由"(",")", "{","}", "[", "]"六种括号组成。若字符串满足以下条件之一,

则为无效字符串:任一类型的左右括号数量不相等

存在未按正确顺序(先左后右)闭合的括号输出括号的最大嵌套深度,若字符串无效则输出0。

0<=字符串长度<=100000

输入描述

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

输出描述

整数,最大的括号深度

用例

一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.一个合法的括号匹配序列有以下定义:

(1)空串“”是一个合法的括号匹配序列

(2)如果“X”和“Y”都是合法的括号匹配序列,“XY”也是一个合法的括号匹配序列

(3)如果“X”是一个合法的括号匹配序列,那么“(X)”也是一个合法的括号匹配序列

(4)每个合法的括号序列都可以由以上规则生成。

2.对于一个合法的括号序列我们又有以下定义它的深度:

(1)空串“”的深度为0

(2)如果字符串“X”的深度是x,字符串“Y”的深度是y,那么字符串“XY”的深度为max(X,Y)

(3)如果“X”的深度是x,那么字符串“(X)”的深度是x+1

3.输入描述:输入包括一个合法的括号序列s,s长度length大于等于2小于等于50,序列中只包含括号(有两道题,一道题是只包括小括号,还有一道题是包括小括号中括号和大括号)

4.输出描述:输出一个正整数,即这个序列的深度

二、解题思路

1.先说只有小括号的情况(一定是合法的)

2.如果只有小括号(且输入合法),我们需要判断深度的话

3.定义一个整数int depth = 0;用来代表深度,定义一个整数int maxdepth = 0;

4.如果遇到左括号,depth增加1,然后如果depth大于maxdepth,maxdepth更新值

5.如果遇到右括号,depth减少1,

6.最后输出maxdepth就是最大深度了

#include <stdio.h>
#include <string.h>
int main() {char str[1000];scanf("%s", str);int depth = 0;int maxdepth = 0;int len = strlen(str);for(int i = 0; i < len; i++) {if(str[i] == '(') {depth++;} else if(str[i] == ')') {depth--;}if(depth > maxdepth) maxdepth++;}printf("%d\n", maxdepth);return 0;
}

1.然后再说有方括号大括号和括号三种括号的情况(并且有可能输入不合法)

2.如果输入不合法(比如左右括号不对称、未按正确顺序闭合)那么输出0

3.我们可以定义一个字符串数组char left[1000];用来记录遇到的括号

4.它的索引值为int idx = 0;我们遍历字符串char str[1000];,每遇到一个左括号,我们将这种类型的左括号放到栈顶,然后idx++

5.我们还需要在前面定义一个int maxdepth = 0;如果遇到的是左括号idx++之后,

6.比较idx和maxdepth的值,如果idx比较大,maxdepth更新值

7.如果我们遇到的是右括号,我们与左括号作比较,如果是同一类型的,那么我们idx--

8.如果是不同类型的,我们认为输入不合法,我们需要在前面定义一个bool valid = true;

9.如果遇到输入不合法的情况,那么我们valid = false;并且break;出循环

10.遍历完字符串以后,如果idx != 0;那么我们认为不合法valid = false;

11.最后,如果不合法,我们输出0,否则的话我们输出maxdepth的值

12.然后返回return 0;

三、具体步骤

使用的语言是C

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main() {char str[1000];scanf("%s", str);char left[1000];int idx = 0;int maxdepth = 0;int len = strlen(str);bool valid = true;for (int i = 0; i < len; i++) {// printf("test i = %d\n", i);if (str[i] == '(' || str[i] == '[' || str[i] == '{') {// printf("遇到左括号\n");left[idx++] = str[i];if (idx > maxdepth) maxdepth = idx;// printf("idx = %d\n", idx);// printf("maxdepth = %d\n", maxdepth);} else if (str[i] == ')') {// printf("遇到)括号\n");if (left[idx - 1] == '(') idx--;else valid = false;} else if (str[i] == ']') {// printf("遇到]括号\n");if (left[idx - 1] == '[') idx--;else valid = false;} else if (str[i] == '}') {// printf("遇到}括号\n");if (left[idx - 1] == '{') idx--;else valid = false;} else {valid = false;}if (valid == false) break;}if (idx != 0) valid = false;if (valid) printf("%d\n", maxdepth);else printf("0\n");return 0;
}


http://www.ppmy.cn/ops/144071.html

相关文章

FFmpeg 安装教程(Windows 系统)

1. 前言 FFmpeg 是一个用于处理视频、音频等多媒体文件的开源工具包。它支持几乎所有的多媒体格式转换、剪辑和编辑&#xff0c;是开发者和多媒体工作者必备的工具。本文详细讲解如何在 Windows 系统上安装 FFmpeg 并进行基本配置。 2. 下载 FFmpeg 安装包 打开 Dpwnload FFmp…

Android Room 数据库使用详解

一、Room介绍 Android Room 是 Google 提供的一个 Android 数据持久化库&#xff0c;是 Android Jetpack 组成部分之一。它提供了一个抽象层&#xff0c;使得 SQLite 数据库的使用更为便捷。通过 Room&#xff0c;开发者可以轻松地操作数据库&#xff0c;不需要直接编写繁琐的…

二、使用langchain搭建RAG:金融问答机器人--数据清洗和切片

选择金融领域的专业文档作为源文件 这里选择 《博金大模型挑战赛-金融千问14b数据集》&#xff0c;这个数据集包含若干公司的年报&#xff0c;我们将利用这个年报搭建金融问答机器人。 具体下载地址 这里 git clone https://www.modelscope.cn/datasets/BJQW14B/bs_challenge_…

智慧商城:购物车模块基本静态结构 + 构建vuex cart模块,获取数据存储(异步actions)

基本静态结构 静态结构直接 cv笔记中的内容 &#xff0c;粘贴到 layout架子上的 cart组件中 给详情页底部的 首页 和 购物车 添加点击跳转事件 cart.vue中应用到的 van-Checkbox组件&#xff0c;进行该组件的引入注册 将数字框替换为之前封装好(两个-按钮中间的1那个输入框)的组…

如果模块请求http改为了https,测试方案应该如何制定,修改

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 将模块的请求协…

电脑频繁弹出“缺少d3dcompiler_47.dll”提示?“缺少d3dcompiler_47.dll”要怎么解决?

电脑频繁弹出“缺少d3dcompiler_47.dll”提示&#xff1f;一文带你了解原因与解决方案 在日常使用电脑的过程中&#xff0c;不少用户可能会遇到系统频繁弹出“缺少d3dcompiler_47.dll”的提示。这个看似陌生的文件名&#xff0c;实则对电脑游戏的运行至关重要。d3dcompiler_47…

【UBUNTU 20】环境变量

查看环境变量 # 查看所有环境变量 export env# 查看指定环境变量 echo $PATH修改环境变量 命令式修改 立即生效仅在当前终端窗口有效&#xff0c;窗口关闭后无效仅对当前用户有效 export PATH${HOME}:$PATH修改 ~/.bashrc 永久有效仅对当前用户有效 vim ~/.bashrc# 在最后…

TypeScript与JavaScript的区别

本文我们要聊一聊 TypeScript 和 JavaScript 之间的区别。可能我们已经注意到&#xff0c;TypeScript 是 JavaScript 的超集&#xff0c;那么它到底比 JavaScript 多了些什么&#xff1f;为什么我们要选择 TypeScript&#xff0c;而不仅仅是写普通的 JavaScript 呢&#xff1f;…