Tk王国的括号【牛客tracker 每日一题】
2026/9/19 2:34:17 网站建设 项目流程

Tk王国的括号

时间限制:1秒
空间限制:1024M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

众所周知,我们日常使用的括号如()[]等,但是在遥远的 Tk 王国,他们使用字母作为括号。

具体地,Tk 王国共有 26 种不同的括号对,其中

现在,给定一个长度为n nn的字符串s ss,字符串由大小写字母构成。你可以重复以下操作任意次:

求经过若干次操作后,字符串可能达到的最短长度。

输入描述

第一行输入一个整数n ( 1 ≤ n ≤ 2 × 10 5 ) n\ (1 \le n \le 2 \times 10^5)n(1n2×105),表示字符串长度;
第二行输入一个长度为n nn,仅由字母组成的字符串s ss

输出描述

输出一个整数,表示字符串可以达到的最短长度。

示例1

输入:

5 azbyc

输出:

1

示例2

输入:

4 evPK

输出:

0

解题思路

本题是括号匹配消除问题,类似用栈处理相邻可配对字符。字符串由大小写字母组成,定义了 26 对特殊的括号对,每次可以删除相邻且恰好组成一对的两个字符,求经过任意次删除后字符串的最短长度。

1. 问题等价转化
2. 配对规则
3. 算法步骤
  1. 读入字符串长度n nn(可忽略)和字符串s ss
  2. 初始化一个空栈t(可用字符串模拟)。
  3. 遍历字符串s ss中的每个字符c
    • 若栈不为空且match(栈顶字符, c)为真,则弹出栈顶;
    • 否则将c压入栈。
  4. 输出栈中剩余字符的个数,即为最短长度。
4. 复杂度分析

总结

本题实质是括号消除,利用栈的后进先出特性处理相邻配对。配对规则可通过字母下标之和为 25 且大小写方向固定来统一判断。算法简洁高效,只需一次线性扫描。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;boolmatch(chara,charb){if(islower(a))returna<b&&(a-'a')+(b-'a')==25;returna>b&&(a-'A')+(b-'A')==25;}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);string s,t;cin>>s>>s;for(charc:s){if(t.size()&&match(t.back(),c))t.pop_back();elset.push_back(c);}cout<<t.size()<<endl;return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询