美团 · 栈 · 算法编程题
美团 n ≤ 200000 时限 1 秒 / 256 MB

题目描述

我们称一个括号序列为“平衡的括号序列”,当且仅当满足以下归纳定义:
1) 空串是平衡的;
2) 若字符串 A 是平衡的,则“ (A) ”是平衡的;
3) 若字符串 A 与 B 均是平衡的,则“ AB ”是平衡的(表示连接)。
例如:括号序列 ()() 与 (()) 是平衡的;而 ) 、 )( 、 ( 不是。
给定一个偶数长度的括号序列 s(仅包含 '(' 与 ')')。你可以进行若干次如下操作:
选择一个位置 i(1 ≤ i < n) ,交换相邻的两个字符 s_i 与 s_i+1 。
请你计算,最少需要进行多少次这样的相邻交换,才能使整个序列变为一个平衡的括号序列。

输入输出

输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤ T≤ 10^5) 代表数据组数,每组测试数据描述如下:
第一行输入一个偶数 n(2≤ n≤ 2× 10^5) ;
第二行输入一个长度为 n 的字符串 s (仅包含 '(' 与 ')')。
保证所有测试中 n 的总和不超过 2× 10^5 ,保证每组数据一定可以通过相邻交换变为平衡序列。
输出描述
对于每组测试数据,输出一行一个整数,表示将 s 变为平衡括号序列所需的最少相邻交换次数。

样例共 1 组

样例 1
输入
3
2
)(
4
()()
4
))((
输出
1
0
3

算法解析依据一般

考点:栈

数据规模 n ≤ 200000 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 200000,T ≤ 1e5
  • 复杂度门槛:只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:栈

后进先出的结构天然适合处理嵌套、匹配与「最近的更大/更小」问题。

思路框架(栈 通法 · 非本题专属)

  1. 括号匹配:遇左括号入栈,遇右括号检查栈顶是否配对。
  2. 单调栈:从左到右扫,维持栈内单调,遇到破坏单调性的元素就弹栈并结算答案。
  3. 每个元素最多进出栈各一次,总复杂度 O(n)。

实现要点:Python 用 list 当栈(append/pop);判断栈空再取栈顶。

复杂度:时间 O(n) | 空间 O(n)

该范式的通法易错点

  • 栈空时取栈顶。
  • 弹栈时机的判断条件写反。

对照本题

  • 数据规模 n ≤ 200000,只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:3 / 2 / )( / 4 / ()() / 4 / ))((
  • 输出:1 / 0 / 3

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年春招-美团-技术岗-第二批笔试;2026年春招-美团-测试岗-第二批笔试;2026年春招-美团-硬件开发岗-第二批笔试 等。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解