给定一个长度为 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 的满足题意的括号序列。
对于每组测试数据,一行输出一个整数,代表需要的最小操作次数。
3 6 ()()() 6 )))((( 18 ))(((())()()()())(
0 3 2
考点:栈
数据规模 n ≤ 1e3 | 限制 1 秒 / 64MB | 标准输入输出
参考方向:栈
后进先出的结构天然适合处理嵌套、匹配与「最近的更大/更小」问题。
思路框架(栈 通法 · 非本题专属)
实现要点:Python 用 list 当栈(append/pop);判断栈空再取栈顶。
复杂度:时间 O(n) | 空间 O(n)
该范式的通法易错点
对照本题
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 1
3 / 6 / ()()() / 6 / )))((( / 18 / ))(((())()()()())(0 / 3 / 2解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2024年秋招-贝壳找房-Java工程师-第二批笔试;2024年秋招-贝壳找房-C++工程师-第二批笔试;2024年秋招-贝壳找房-前端工程师-第二批笔试 等。