贝壳找房 · 栈 · 算法编程题
贝壳找房 n ≤ 1e3 时限 1 秒 / 64 MB

题目描述

给定一个长度为 n ( n 一定是偶数) 的仅含有 "(" 和 ")" 的括号序列,其中,"(" 有 ( n/ 2) 个,")" 也有 ( n/ 2) 个。
牛牛可以进行若干次操作,每一次操作,选择一个下标 i( 1≤ i≤ n) ,然后将该下标位置上的括号移动到整个序列的开头或者末尾。
那么,牛牛最少需要操作多少次,可以将该括号序列转化成一个常规括号序列?
"()" 是一个常规括号序列;
若 s 是一个常规括号序列,那么 "(" + s + ")" 也是一个常规括号序列;
若 s 是一个常规括号序列, t 也是一个常规括号序列,那么 s+ t 也是一个常规括号序列。

输入输出

输入描述
本题为多组测试数据,第一行输入一个正整数 T( 1≤ T≤ 1000) ,代表测试数据的组数。
对于每组测试数据,第一行输入一个正整数 n( 1≤ n≤ 1000; n\% 2= 0) ,代表括号序列的长度。
第二行输入一个长度为 n 的满足题意的括号序列。
输出描述
对于每组测试数据,一行输出一个整数,代表需要的最小操作次数。

样例共 1 组

样例 1
输入
3
6
()()()
6
)))(((
18
))(((())()()()())(
输出
0
3
2

算法解析依据一般

考点:栈

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

题目画像

  • 数据规模:T ≤ 1e3,n ≤ 1e3
  • 复杂度门槛:允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:栈

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

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

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

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

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

该范式的通法易错点

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

对照本题

  • 数据规模 n ≤ 1e3,允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:3 / 6 / ()()() / 6 / )))((( / 18 / ))(((())()()()())(
  • 输出:0 / 3 / 2

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

本题来源:2024年秋招-贝壳找房-Java工程师-第二批笔试;2024年秋招-贝壳找房-C++工程师-第二批笔试;2024年秋招-贝壳找房-前端工程师-第二批笔试 等。

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