news 2026/10/21 2:31:47

小红的环形字符串【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小红的环形字符串【牛客tracker 每日一题】

小红的环形字符串

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

网页链接

牛客tracker

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


题目描述

小红拿到了一个环形字符串。所谓环形字符串,即首尾相连的字符串。

小红每次可以删除两个相邻的相同字符。小红想知道,最多可以删除多少个字符?


输入描述

第一行输入一个正整数n nn,代表环形字符串的长度。

第二行输入一个长度为n nn,且仅由小写字母组成的字符串。请注意该字符串是首尾相连的。

1 ≤ n ≤ 10 5 1 \le n \le 10^51≤n≤105


输出描述

最多可以删除的字符数量。


示例 1

输入:

5 abcba

输出:

4

说明:可以先删除两个 a,字符串变成 bcb。

然后删除两个 b,字符串变成 c。

总共删除了 4 个字符。


数据范围

解题思路

本题是栈模拟 + 环形消除的经典问题。给定一个环形字符串,每次可以删除两个相邻且相同的字符,删除后字符串会重新连接(包括首尾相连),要求最多能删除多少个字符。

1. 问题等价转化
2. 算法实现
  1. 读入n nn和字符串s ss。
  2. 使用双端队列deque<char>模拟栈:
    • 遍历字符串s ss的每个字符c cc:
      • 若队列非空且队尾字符等于c cc,则弹出队尾(消除一对);
      • 否则将c cc压入队尾。
  3. 处理环形首尾:
    • 当队列大小大于 1 且队首字符等于队尾字符时,同时弹出队首和队尾(消除一对);
    • 重复此过程直到条件不满足。
  4. 输出n - q.size(),即最多删除的字符数。
3. 复杂度分析

总结

利用栈在线性消除相邻相同字符,再通过双端队列处理环形首尾可能存在的消除。核心在于理解环形结构使得首尾字符也可能相邻,因此需要在一次线性消除后继续检查首尾。该方法简洁高效,完美解决了环形字符串的消除问题。

代码内容

#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=998244353;voidsolve(){ll n;cin>>n;string s;cin>>s;deque<char>q;for(auto&c:s){if(q.size()&&q.back()==c){q.pop_back();continue;}q.push_back(c);}while(q.size()>1&&q.front()==q.back()){q.pop_front();q.pop_back();}cout<<n-q.size()<<"\n";}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll t=1;//cin>>t;for(ll i=1;i<=t;i++)solve();return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 2:30:41

华东师大:从单纯堆环境到系统级自我进化

📖标题:WEFT: Scaling Tool-Use Post-Training for General-Purpose Agents 🌐来源:arXiv, 2609.36887v1 🛎️文章简介 🔸研究问题:如何在不只是简单增加可执行环境数量的情况下,通过优化整个代理交互系统来提升大模型使用工具的能力? 🔸主要贡献:论文提出了W…

作者头像 李华
网站建设 2026/10/21 2:30:23

C++左值右值解析:从基础到移动语义

1. 是什么左值&#xff08;lvalue&#xff09;&#xff1a;有名称、有持久存储的对象&#xff0c;可以取地址&#xff0c;可出现在赋值号左边。右值&#xff08;rvalue&#xff09;&#xff1a;临时的、无名称的值&#xff0c;不能取地址&#xff0c;只能出现在赋值号右边。C11…

作者头像 李华
网站建设 2026/10/21 2:30:23

光伏组件视觉检测实战:从电池片到组件的完整方案设计

光伏组件视觉检测实战&#xff1a;从电池片到组件的完整方案设计 机器视觉选型笔记 行业应用实战第 8 篇 **阅读提示&#xff1a;**本文约 7800 字&#xff0c;预计阅读 19 分钟。如果你正在做光伏电池片或组件端的视觉检测方案&#xff0c;建议直接拉到文末拿「光伏视觉检测…

作者头像 李华
网站建设 2026/10/21 2:30:21

美股韩股一起亏?穿透AI产业链依赖

同一个最终客户的采购预算&#xff0c;可以经过不同公司&#xff0c;出现在不同国家的收入里。 因此&#xff0c;按上市地给持仓分类&#xff0c;并不能直接识别业务依赖是否分散。对研究AI&#xff08;人工智能&#xff09;产业的人&#xff0c;这既是行业分析问题&#xff0c…

作者头像 李华
网站建设 2026/10/21 2:29:55

SSM+Vue小区物业管理系统毕设全攻略:从需求到论文

最近不少准备做2026届毕业设计的学弟学妹来找我&#xff0c;问得最多的一个选题就是“SSM Vue的小区物业管理系统”&#xff0c;手里拿到的题目偏偏又是“滨河新城小区管理系统”这种带具体项目名的类型。说实话&#xff0c;这类题目看起来平平无奇&#xff0c;但仔细拆开看&a…

作者头像 李华