【牛客 - 551D】CSL 的字符串(单调栈,思维)
题干:
CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助。
给定一个字符串,只含有可打印字符,通过删除若干字符得到新字符串,新字符串必须满足两个条件:
- 原字符串中出现的字符,新字符串也必须包含。
- 新字符串中所有的字符均不相同。
- 新字符串的字典序是满足上面两个条件的最小的字符串。
输入描述:
仅一行,有一个只含有可打印字符的字符串 s。
|s|≤105|s|≤105
输出描述:
在一行输出字典序最小的新字符串。
示例1
输入
复制
bab
输出
复制
ab
示例2
输入
复制
baca
输出
复制
bac
备注:
ASCII字符集包含 94 个可打印字符(0x21 - 0x7E),不包含空格。
解题报告:
这题是类似单调栈的思想,只不过弹出的时候要判断一下是否后面还有改数字。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 1e5 + 5;
string s;
bool vis[MAX];
int bk[555],tot;
stack<char > sk;
int main() {cin>>s;int len = s.size();s = ' ' + s;for(int i = 1; i<=len; i++) {bk[s[i]]++;}string ans;int cur = 1,pos = 1;for(int i = 1; i<=len; i++) {char tar = s[i];bk[tar]--;if(vis[tar]) continue;while( sk.size() && bk[sk.top()] && tar < sk.top()) {vis[sk.top()] = 0;sk.pop();ans.pop_back();}ans += tar;sk.push(tar);vis[tar] = 1;}cout << ans << endl;return 0 ;
}
//bcdddbca
【牛客 - 551D】CSL 的字符串(单调栈,思维)相关推荐
- 牛客 - 牛牛的滑动窗口(单调栈+思维+差分)
题目链接:点击查看 题目分析:给出 nnn 个数,定义滑动窗口的贡献是其中最大值与最小值的乘积,现在问对于长度分别为 [1,n][1,n][1,n] 的滑动窗口,贡献之和分别是多少 题目分析:考虑暴力 ...
- 牛客 奇怪的排序问题(单调栈/遍历)
文章目录 1. 题目 2. 解题 1. 题目 链接:https://ac.nowcoder.com/acm/contest/10166/B 来源:牛客网 操场上有n个人排成一队,这n个人身高互不相同, ...
- 2021牛客多校2 - Stack(单调栈+拓扑)
题目链接:点击查看 题目大意:给出 b[i]b[i]b[i] 数组的求解过程: Stk is an empty stack for i = 1 to n :while ( Stk is not emp ...
- 牛客小白月赛13-H(单调栈+树状数组)
题目链接:https://ac.nowcoder.com/acm/contest/549/H 题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积. 思路:显然最大矩阵的高一定为n个 ...
- 牛客 小米校招 计算题 单调栈 接雨水
给定n个非负整数表示每个宽度为1的柱子的高度题,计算按此排列的柱子,下雨之后能接多少雨水. 经典的题目 leetcode 42 接雨水 单调栈 保持栈内单调递减 每次把一个矮的出栈都能够加上一大块面积 ...
- 【牛客】CSL 的字符串 (stack map)
https://ac.nowcoder.com/acm/contest/551/D 这个题怎么说,data用来存储这个字母在字符串中最后一次出现的位置,vis则用来记录该字母是否在栈中. 当栈为空的时 ...
- 牛客题霸 [将字符串转化为整数] C++题解/答案
牛客题霸 [将字符串转化为整数] C++题解/答案 题目描述 实现函数 atoi .函数的功能为将字符串转化为整数 提示:仔细思考所有可能的输入情况.这个问题没有给出输入的限制,你需要自己考虑所有可能 ...
- 牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案
牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案 题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 题解: i和j两个指针分别指不重复子 ...
- 牛客题霸 [反转字符串] C++题解/答案
牛客题霸 [反转字符串] C++题解/答案 题目描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000) 题解: 有reverse现成的翻转函数,直接套进去就可 ...
- 牛客题霸 [旋转字符串]C++题解/答案
牛客题霸 [旋转字符串]C++题解/答案 题目描述 字符串旋转: 给定两字符串A和B,如果能将A从中间某个位置分割为左右两部分字符串(都不为空串),并将左边的字符串移动到右边字符串后面组成新的字符串可 ...
最新文章
- SAP提请法院向甲骨文支付不超4亿美元赔偿金
- AI芯片评测如何与时俱进?地平线提出全新MAPS评测方法,帮助用户理解AI芯片性能...
- python一:hello world
- Visual Basic的未来之路
- 计算机文化教程实验基础知识,《计算机文化基础上机实验教程》孙家启、黄晓梅、刘奎 著_孔网...
- MPI Maelstrom——Dijkstra
- 初探EntityFramework——空Code First模型
- Seata多微服务互相调用_全局分布式事物使用案例_Order-Module order微服务的配置搭建---微服务升级_SpringCloud Alibaba工作笔记0060
- ICML'21 GNN的最新研究热点
- 在linux系统下安装oracle前的准备工作(配置oracle环境变量)
- 实现安卓中TextView,EditText中数字的数码管字体显示
- 原创 subsonic指南中文 翻译
- 用JSDoc生成js文档
- C# 多文件压缩与解压
- 中外十大武侠片排行榜
- Android 实现扫一扫功能
- 多益网络校招 —— web前端一面
- 计算机绘图实训体会,CAD实习心得体会
- sql server根据日期筛选出工作日的数据
- 华为无线学习笔记--WLAN(无线)实验
热门文章
- 2017百度之星资格赛 1003 度度熊与邪恶大魔王
- 华为云上可订阅F5_F5亮相华为云计算大会 解读云应用交付
- eclipse xml文件报错_Maven教程6: Maven与Eclipse整合
- 系统云服务器,系统云服务器
- pjsua帮助手册(中文)
- ISDN与PSTN的区别是什么?
- C语言依次显示图片,c语言能显示图片吗
- python归一化 增大差异_Python逻辑回归模型原理及实际案例应用
- python画饼图程序_python使用matplotlib画饼状图
- android 安装第三方app,Android识别预装的第三方App方法实例