P1241 括号序列

括号平衡 C++题解 内存限制: 128 MiB时间限制: 1000 ms标准输入输出题目类型: 传统评测方式: 文本比较。 阅读详情

题目描述

定义如下规则:

  1. 空串是「平衡括号序列」
  2. 若字符串 S 是「平衡括号序列」,那么[S] 和(S) 也都是「平衡括号序列」
  3. 若字符串 A 和 B 都是「平衡括号序列」,那么 AB(两字符串拼接起来)也是「平衡括号序列」。

例如,下面的字符串都是平衡括号序列:

(),[],(()),([]),()[],()[()]

而以下几个则不是:

(,[,],)(,()),([()

现在,给定一个仅由 (,),[,]构成的字符串 s,请你按照如下的方式给字符串中每个字符配对:

  1. 从左到右扫描整个字符串。
  2. 对于当前的字符,如果它是一个右括号,考察它与它左侧离它最近的未匹配的的左括号。如果该括号与之对应(即小括号匹配小括号,中括号匹配中括号),则将二者配对。如果左侧未匹配的左括号不存在或与之不对应,则其配对失败。

配对结束后,对于 s 中全部未配对的括号,请你在其旁边添加一个字符,使得该括号和新加的括号匹配。

输入格式

输入只有一行一个字符串,表示 s。

输出格式

输出一行一个字符串表示你的答案。

输入输出样例

输入 #1

([()

输出 #1

()[]()

输入 #2

([)

输出 #2

()[]()

说明/提示

数据规模与约定

对于全部的测试点,保证 s 的长度不超过 100,且只含 (,),[,] 四种字符。

题目难度

普及-

参考思路

原题目:扫描一遍原序列,对每一个右括号,找到在它左边最靠近它的左括号匹配,如果没有就放弃。

翻译:扫描一遍原序列,当找到一个右括号(即找到一个 ' ) ' 或者 ' ] ' 时),以它为起点向左找,找到一个没被标记成功匹配的左括号(即找到一个 ' ( ' 或者 ' [ ' ),如果两者匹配的话,标记它们成功匹配,如果不匹配,或者找不到左括号的话,不做任何标记。

原题目:在以这种方式把原序列匹配完成后,把剩下的未匹配的括号补全。

翻译:上面扫描一遍标记完成功匹配的括号之后,扫描一遍序列,对于标记过的括号,则直接输出;对于没有标记的括号,则补全成对输出

举例:如果有个 ' [ ' 或 ' ] ' 没被标记匹配,则输出 [ ]

例:

输入:

( [ ) ] )

输出:

( [ ( ) ] )

参考代码

#include <bits/stdc++.h>

using namespace std;

int a[105]; // 标记

int main()
{
    int i,j;
    string s;
    cin >> s;
    for (i=0; i<s.length(); i++) {
        if (s[i] == ')') { // 找到了右括号
            for (j=i-1; j>=0; j--) {
                if (s[j] == '(' and a[j] == 0) { // 找到了没被匹配过的左括号且匹配成功
                    a[i] = a[j] = 1;
                    break;
                }
                else if (s[j] == '[' and a[j] == 0) break; // 找到了左括号但匹配失败
            }
            // 找不到左括号,不做任何操作
        }
        // 下面同理
        else if (s[i] == ']') {
            for (j=i-1; j>=0; j--) {
                if (s[j] == '[' and a[j] == 0) {
                    a[i] = a[j] = 1;
                    break;
                }
                else if (s[j] == '(' and a[j] == 0) break;
            }
        }
    }
    for (i=0; i<s.length(); i++) {
        if (a[i] == 0) { // 没有匹配则成对输出
            if (s[i] == '(' or s[i] == ')') cout << "()";
            else cout << "[]";
        }
        else cout << s[i]; // 匹配成功则直接输出
    }
    return 0;
}

《P1241 括号序列》 配对结束后,对于 s 中全部未配对的括号,请你在其旁边添加一个字符,使得该括号和新加的括号匹配。对于全部的测试点,保证 s 的长度不超过 100,且只含。输入只有一行一个字符串,表示 s。输出一行一个字符串表示你的答案。 阅读详情

相关推荐

【2025年中国电信秋招-9月27日-第三题(300分)- 平衡的括号序列】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 题目要求将给定的括号序列通过最少交换次数变为平衡序列。平衡序列定义为空串、或由平衡序列嵌套或连接而成。关键结论是:从左到右扫描时,当未匹配的右括号过多时(计数bal为负),必须进行一次交换将后面的左括号换到当前位置,此时答案加1并将bal重置为1。算法采用贪心策略,线性扫描一次即可得到最少交换次数。时间复杂度为O(n),适用于大规模数据。

m0_73659489的博客 126

上海计算机学会2022年4月月赛C++丙组T3平衡括号(一)

的括号序列,请删除尽量少的括号,使它变成平衡的。单个整数:表示最少删去多少个括号才能使输入序列变成平衡的。内存限制: 256 Mb时间限制: 1000 ms。单个字符序列:表示输入的序列,保证只包含。设 n 表示输入序列的长度。

长春高老师编程 1258

【C++栈】1541. 平衡括号字符串的最少插入次数|1759

给你一个括号字符串 s ,它只包含字符 '(' 和 ')' 。一个括号字符串被称为平衡的当它满足: 任何左括号 '(' 必须对应两个连续的右括号 '))' 。 左括号 '(' 必须在对应的连续两个右括号 '))' 之前。 比方说 "())", "())(())))" 和 "(())())))" 都是平衡的, ")()", "()))" 和 "(()))" 都是不平衡的。 你可以在任意位置插入字符 '(' 和 ')' 使字符串平衡。 请你返回让 s 平衡的最少插入次数。

闻缺陷则喜何志丹 1165

C++ Balanced Braces

A string of characters has balanced braces (parentheses, curly braces, and square braces) if each right-facing brace occurring in the string is matched with a preceding left-facing brace. Further, braces should be properly contained. That is, if one type o

程序设计 478

括号平衡问题,括号平衡问题

资源==括号平衡问题

PSM倾向匹配详细步骤和程序

目录1.安装psmatch2统计包。2.数据准备3.数据分析及命令解读4.结果解读4.1模型拟合结果,此处无太多实际意义。4.2试验组可匹配的观测概览,按照命令中设定的匹配规则,试验组有8例患者未能匹配到合适对照。4.3结果解读的重点应该是对stata新生成的中间变量的解读。4.4均衡性检验结果4.5匹配结果的图示化5.Stata命令汇总最后留下两个问题给大家思考:题目 试验设计中,匹配的目的在于确保干预效应估计是建立在可比个体之间的不同结果的基础上。最简单的匹配方式是将干预组和对照组中协变量值相同的两个个

平平淡淡,戒急用忍,一生学闭嘴。 5万+

洛谷 P1241 括号序列

SSSABAB()[](())([])()[]()[()])(())([()现在,给定一个仅由构成的字符串s配对结束后,对于s中全部未配对的括号,请你在其旁边添加一个字符,使得该括号和新加的括号匹配。

exm-zem的博客 1565

从CORDIC到DDS:手把手拆解《Verilog传奇》第9章的实战项目(附可跑通的代码)

本文详细解析了如何从CORDIC算法到DDS系统的完整实现过程,基于《Verilog传奇》第9章的实战项目,提供了可运行的Verilog代码。内容涵盖CORDIC算法的硬件实现、DDS系统架构设计、完整系统集成与验证,以及实际部署中的性能调优技巧,适合数字IC和FPGA开发者深入学习。

weixin_42623010的博客 413

洛谷P1241括号序列

题目描述 定义如下规则序列(字符串):1.空序列是规则序列;2.如果S是规则序列,那么(S)和[S]也是规则序列;3.如果A和B都是规则序列,那么AB也是规则序列。例如,下面的字符串都是规则序列:(),[],(()),([]),()[],()[()]而以下几个则不是:(,[,],)(,()),([()现在,给你一些由‘(’,‘)’,‘[’,‘]’构成的序列,你要做的,是补全该括号序列,即扫描一遍原序列,对每一个右括号,找到在它左边最靠近它的左括号匹配,如果没有就放弃。在以这种方式把原序列匹配完成后,把剩下的

m0_56243424的博客 435

Understand-Anything:AI驱动的代码知识图谱,实现项目全局洞察与高效导航

在软件开发中,理解复杂代码库的结构和依赖关系是提升开发效率的关键。传统代码阅读方式往往陷入局部视角,难以快速把握系统全貌。知识图谱技术通过将代码实体(如文件、类、函数)及其关系(调用、继承、依赖)可视化,为代码理解提供了全局视角。这项技术的核心价值在于将静态代码转化为动态、可交互的认知地图,极大降低了系统学习与维护成本。在实际工程中,它广泛应用于新成员快速入职、遗留系统梳理、架构影响分析等场景。本文介绍的Understand-Anything工具,正是基于这一理念,通过多智能体分析管道,自动构建代码的结构图

weixin_42615290的博客 882

Qt上位机实战:5步搞定STM32 IAP固件升级(附拖拽文件处理技巧)

本文详细介绍了如何使用Qt开发STM32 IAP固件升级上位机。通过五个核心步骤,包括理解IAP机制、搭建Qt环境、实现拖拽文件加载、封装串口通信以及设计可靠通信协议,帮助开发者快速构建一个稳定、易用且支持图形化操作的固件升级工具,显著提升嵌入式产品开发与维护效率。

ss78901的博客 1076

p1241括号序列-栈

p1241括号序列-栈

m0_46183615的博客 382

闲人闲谈PS之一项目库存跨公司业务STO解决方案--SAP闲人的开篇

写这篇文章之前,简单说一下发这篇文章的动机。也算是在SAP这一行干了快10多年,在对一个模块了解越来越深入,越发觉自己的SAP知识浅薄。总的来说,和多数顾问一样,对于**标准功能**的应用业务场景理解还是存在或多或少的知识盲区。 因为一个偶然,看到SAP团子君的文章,分享了很多干货文章。这也是自己一直想做的时候,不管水平高低与否,分享本身就意味着提升。好了废话不多说,先在优快云上发一篇吧,困惑自己将近10年的问题的解决方案。 业务场景:在项目型企业中,通常会有这样的业务,母公司和客...

SAP闲人的博客 9267

P1241 括号序列【stack】

SSSABAB()[](())([])()[]()[()])(())([()现在,给定一个仅由构成的字符串s配对结束后,对于s中全部未配对的括号,请你在其旁边添加一个字符,使得该括号和新加的括号匹配。

海岛Blog 1082

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络数据集不同于几何网络,是一种高级的连接模型,能够展示复杂的细节,拥有丰富的网络属性模型,可以模拟网络阻力、网络限制以及网络层次等。 本实验重点演示网络分析中最短路径的实现过程。 二、实验内容 1、网络数据集...

智慧空间实验室 5681

倒立摆的PLC控制(模型分析+ SCL源代码)

首先简单介绍下倒立摆模型,下面这幅图是MATLAB网站上的倒立摆模型,下面我们利用牛顿第二运动定律建立摆杆的运动方程。

RXXW_Dor的博客 3331

题解 - 洛谷P1241【括号序列】

原题链接【洛谷】 题目描述 定义如下规则序列(字符串): 空序列是规则序列; 如果 SSS 是规则序列,那么 (S)(S)(S) 和 [S][S][S] 也是规则序列; 如果 AAA 和 BBB 都是规则序列,那么 ABABAB 也是规则序列。 例如,下面的字符串都是规则序列: (),[],(()),([]),()[],()[()] 而以下几个则不是: (,[,],)(,()),([() 现在...

硅谷小蛙的技术博客 1240

silero-vad 训练自己的数据

silero-vad 训练自己的数据

jacke121的专栏 815

洛谷 P1241 括号序列 | 栈的经典应用与C++实现

本文解析了洛谷P1241括号匹配问题。题目要求对包含'()[]'的字符串进行补全,使其成为合法序列。核心算法利用栈结构进行括号匹配:扫描时左括号入栈,右括号与栈顶匹配则标记并出栈。最后补全未匹配的括号。代码实现采用两次扫描,时间空间复杂度均为O(n)。典型测试用例验证了算法的正确性,如输入"([()"输出"()"。该问题体现了栈在语法分析中的典型应用,可拓展到多类型括号匹配等变种问题。

stillwatersss的博客 1223

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

洛谷P1241 括号序列(c嘎嘎)

我们可以开一个栈,然后从左到右遍历,每当遇到左括号就将左括号位置压入栈,遇到右括号就取出栈顶然后与当前遍历到的左括号进行匹配匹配成功,弹出栈并进行标记匹配成功的左右括号的位置,最后进行输出,标记过的直接输出未标记的输出匹配的两个括号。

2302_79431881的博客 437

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

洛谷 P1241 括号序列 (Java)

当遇到右括号时,程序会向前搜索左括号,直到找到与之匹配的左括号或者不再有未匹配的左括号为止。如果找到了匹配的左括号,则将其配对,并将 a 数组中对应位置的值置为 1 表示已匹配。如果未找到匹配的左括号,则配对失败。遍历完字符串后,再次遍历字符串 s,根据 a 数组中记录的匹配情况,对未匹配的括号进行补全。如果某个位置的括号未匹配,则输出一个新的括号使其匹配。中全部未配对的括号,请你在其旁边添加一个字符,使得该括号和新加的括号匹配。首先,使用了一个整型数组 a 来记录每个括号是否已经匹配。

Keven_6的博客 1409

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

[洛谷]P1241 括号序列

熟悉栈的使用。

Turing_Sheep的博客 1156

Luogu p1241 括号序列

括号序列题目连接 这是一道与dp毫无半点关系的题 本来是去找的题来着,结果并没有找到,然后看到了这道题。 (本来以为会是很好写的一道题结果因为题意不清直接原地去世了) 思路很简单,基本没有技术含量。 因为数据范围很小,我们可以直接进行暴搜; 定义bool 数组add表示第i个字符所对应的括号有没有被匹配,如果没有匹配需手动补全; 从左往右扫描,如果扫描到']'or')',从当前位置开始向...

weixin_30886233的博客 304
上一篇: P1464 Function
下一篇: P1234 小 A 的口头禅
leaf5049
博客等级 码龄3年 442粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值