利用递归实现括号匹配
案例引入
以下则是各个字符串经过括号处理之后的结果:
12((21))(12-->12(21)12
32((((2121)212(21)-->32(2121)212(21)
ABDF((SA)SA)SA(SA)SA(((-->ABDF((SA)SA)SA(SA)SA
算法思路:
这个问题的解决方法就是将字符按顺序逐一加入到新的string容器store中,当遇到'('或')'时需要对字符的加入方式做特殊处理。
定义处理该多余括号字符串的函数为 string removeParentheses(string& s,int& i); 定义中途辅助函数为string sonSolution(string& s,int& i).
为了简化问题求解,只讨论第一个所遇到的括号字符。因此,对于字符的处理可以分为三种情况:
第一种,非括号字符直接加入到新容器store中;
第二种,当我们遇到的第一个括号')'时,由于')'前面没有与之匹配的'(',因此这个')'不能加入到新容器,直接舍去。对于该')'后面的字符串,由于其加入方式不受前面加入字符的影响,因此可以递归调用本函数,将递归返回值,即后续待被处理的子串接在store后面。(递归体现) 如图所示:


第三种,当遇到的第一个括号为'('时,需要对后续的字符加入方式做特殊处理。(在此我们需要再定义一个函数)
在第三种情况里面,函数所处理的字符依旧分为三种情况:
第一种,后续字符为非括号字符,直接加入到新容器newstore里面;
第二种,当遇到的第一个括号字符为')'时,直接加入到store中,并break返回结果。
第三种,若所遇到的弟也给括号字符为'('时,递归调用该函数(递归体现)。
以上就是如何删除多余括号的处理方式,同时需要借用下标i记录字符当前的读取位置,并且i==s.size()为读取结束标志。
代码实现
口说无凭,以下是代码实现:
#include<iostream>
using namespace std;
#include<string>
class solution {
public:string sonSolution(string& s, int& i) {i++;string newstore = "";while (i != s.size()) {if (s[i] == ')') {newstore = '(' + newstore + ')';i++;break;}else if (s[i] == '(') {newstore += sonSolution(s, i);}else {newstore += s[i];i++;}}return newstore;}string removeParentheses(string& s, int& i) {string store = "";while (i != s.size()) {if (s[i] == ')') {i++;store += removeParentheses(s, i);}else if (s[i] == '(') {store+=sonSolution(s, i);}else {store += s[i];i++;}}return store;}
};int main() {solution s;for (int j = 0;j < 3;j++) {int i = 0;cout << "原始字符串:" << endl;string str;cin >> str;cout << "处理结果:" << endl;cout << s.removeParentheses(str, i) << endl;}return 0;
}
测试结果:

结语
该问题不只有一种解法,利用栈的数据结构也能解决问题,但总体思路是,'('只有遇到')'才能完成匹配,否则需要舍弃,在'('加入到新容器前可以先搜索它后面的括号情况,再根据情况做出判断;当只有遇到')'时,由于没有与'('直接舍弃,否则与')'构成完整的字符串作为返回值。期间对于已经完成匹配括号的子串,其后面剩余的字符串可以递归处理,以简化问题求解。
相关文章:

利用递归实现括号匹配
案例引入以下则是各个字符串经过括号处理之后的结果:12((21))(12-->12(21)1232((((2121)212(21)-->32(2121)212(21)ABDF((SA)SA)SA(SA)SA(((-->ABDF((SA)SA)SA(SA)SA算法思路:这个问题的解决方法就是将字符按顺序逐一加入到新的string容器store…...
14.线程数量怎么制定?
什么是CPU 密集型任务和耗时 IO 型任务 ? CPU 密集型任务 CPU 密集型任务,比如加密、解密、压缩、计算等一系列需要大量耗费 CPU 资源的任务。 耗时 IO 型任务 数据库、文件的读写,网络通信等任务,这种任务的特点是并不会特别消耗…...
C++中STL标准模板库学习记录
文章目录:1.vector1.1 遍历方式1.2 构造函数1.3 容量大小问题1.4 插入和删除1.5 存取值1.6 交换两个vectot的元素1.7 预定义存储空间2.string3. deque4. stack4.1 常用函数5. queue5.1 特点5.2 方法6. list6.1 优点6.2 缺点6.3 构造函数6.4 交换6.5 大小6.6 插入和删…...

《数据库系统概论》学习笔记——第六章 关系数据理论
教材为数据库系统概论第五版(王珊) 这一章重点在于各种范式的概念和将低级范式转为高级范式。一定要看多值依赖和4NF(因为这个概念很绕又烦,但是期中期末都考了)。最后计算题就是一定要会:算闭包࿰…...

Odoo | Webserivce | 5分钟学会【JSONRPC】接口开发
文章目录Odoo - JsonRPC1. Odoo内方法结构(接收端)2. POST接口请求结构(发送端)3. 实例测试Odoo - JsonRPC 1. Odoo内方法结构(接收端) # -*- coding: utf-8 -*- import odoo import logging import trac…...

搜广推 NeuralCF - 改进协同过滤+矩阵分解的思想
😄 NeuralCF:2017新加坡国立大学提出。【后文简称NCF】 😄 PNN:2016年上海交通大学提出。 文章目录 NeuralCF动机原理general NCFNCF终极版(GMF+MLP的结合)缺点优点ReferenceNeuralCF 动机 前面学了MF,可知MF在用户-物品评分矩阵的基础上做矩阵分解(用户矩阵Q和物品…...

dbever连接kerberos认证的hive
文章目录一、本地安装kerberos客户端二、本地kerberos客户端登录三、dbever连接hive一、本地安装kerberos客户端 下载地址:https://web.mit.edu/kerberos/dist/index.html 安装:下一步或者自定义安装即可 安装后会自动生成配置文件:C:\Pro…...

pom依赖产生的各种问题
文章目录问题一(org.apache.ibatis.session.Configuration)解决方法问题二(ERROR StatusLogger No log4j2)解决方法问题三(com.google.common.util.concurrent)解决方法问题四(start bean documentationPluginsBootstrapper)解决方法问题五(Unable to infer base url. )解决办法…...

RPC编程:RPC框架设计目标
一:前导知识 Http是超文本传输协议,跨平台性非常好。Http可以传输文本,更多的时候传输的是文本,我们也是可以传输二进制的,我们基于Http进行下载的时候,就是走的Http协议。 Tcp协议,处理的时候…...

RBAC 权限模型介绍
RBAC 权限: 一、关系: 这基于角色的访问控制的结构就叫RBAC结构。 二、RBAC 重要对象: 用户(Employee):角色施加的主体;用户通过拥有某个或多个角色以得到对应的权限。角色(Role&…...

西电面向对象程序设计核心考点汇总(期末真题)
文章目录前言一、往年真题与答案1.1 改错题1.2 读程题1.3 面向对象程序设计二、易错知识点2.1 构造函数2.2 静态成员变量和静态成员函数2.3 权限2.4 继承2.5 多态总结前言 主要针对西安电子科技大学《面向对象程序设计》的核心考点进行汇总,包含总共8章的核心简答。…...

判断一个用字符串表达的数字是否可以被整除
一.问题引出 当一个数字很大的时候,我们常用字符串进行表达,(超过了int和long等数据类型可以存储的最大范围),但是这个时候我们该如何判断他是否可以被另一个数整除呢? 这个时候我们不妨这样来考虑问题,每次将前边求模之后的数保存下来,然后乘以10和这一位的数字进行相加的操…...

这是一款值得开发人员认真研究的软件,数据库优化,应用服务器安全优化...
1.查询数据库死锁相关信息2.查看数据库的链接情况3.当前实例上的所有用户4.创建数据库独立密码5.查看数据库使用的端口号6.当前数据库设置的最大连接数7.当前数据库最大的理论可连接数8.当前数据库实例的连接数9.当前数据库连接数10.当前数据库连接超时设置11.当前sqlserver 超…...

栈与队列小结
一、理论基础1.队列是先进先出,栈是先进后出2.栈和队列是STL(C标准库)里面的两个数据结构。栈提供push和pop等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器。3.栈是以底层容器…...

SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置
在项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是 Druid ,为监控而生的数据库连接池。HikariCP ,号称性能最好的数据库连接池。 在Spring Boot 2.X 版本,默认采用 HikariCP 连接池。而…...

ShardingSphere水平、垂直分库、分表和公共表
目录一、ShardingSphere简介二、ShardingSphere-分库分表1、垂直拆分(1)垂直分库(2)垂直分表2、水平拆分(1)水平分库(2)水平分表三、水平分库操作1、创建数据库和表2、配置分片的规则…...

《分布式技术原理与算法解析》学习笔记Day24
分布式缓存 在计算机领域,缓存是一个非常重要的、用来提升性能的技术。 什么是分布式缓存? 缓存技术是指用一个更快的存储设备存储一些经常用到的数据,供用户快速访问。 分布式缓存是指在分布式环境或者系统下,把一些热门数据…...

强化学习RL 02: Value-based Reinforcement Learning
DQN和TD更新算法。 目录 Review 1. Deep Q-Network(DQN) 1.1 Approximate the Q*(s,a) Function 1.2 Apply DQN to Play Game 1.3 Temporal Difference(TD) Learning 1.4 TD Learning for DQN 1.4.1 TD使用条件 condition 1.4.2 Train DQN using TD learning 1.5 summ…...

08_MySQL聚合函数
1. 聚合函数介绍什么是聚合函数聚合函数作用于一组数据,并对一组数据返回一个值。聚合函数类型AVG()SUM()MAX()MIN()COUNT()注意:聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。1.1 AVG和SUM函数可以对数值型数据使用AVG 和…...

「TCG 规范解读」词汇表
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...