51nod 1255 字典序最小的子序列 神奇的栈用法
来源:互联网 发布:爱淘宝是淘宝客吗 编辑:程序博客网 时间:2024/04/28 20:12
贪心算法
修改 隐藏话题
1255 字典序最小的子序列
题目来源: 天津大学OJ
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注
给出一个由a-z组成的字符串S,求他的一个子序列,满足如下条件:
1、包含字符串中所有出现过的字符各1个。
2、是所有满足条件1的串中,字典序最小的。
例如:babbdcc,出现过的字符为:abcd,而包含abcd的所有子序列中,字典序最小的为abdc。
Input
输入1行字符串S,所有字符均为小写,字符串的长度为L。(1 <= L <= 100000)。
Output
输出包含S中所有出现过的字符,每个字符各1个,并且字典序最小的S的子序列。
Input示例
babbdcc
Output示例
abdc
- - 不会的话先看数据结构书上的逆波兰式 。
这个也是用到了优先级 。
优先小的放在前面
每次的新的值 和栈顶的比 如果栈顶的值比较大 并且栈顶的值在后面还有出现的话 就出栈 直到最后
如果这个值在栈里 或者这个值在后面不出现了的话 就停止循环
优先级的栈的用法
下面代码是模拟栈 , 先模拟栈,再用stl的栈。。别直接用栈。。不好改。
微调- -
#include <iostream>#include <stdio.h>#include <iomanip>#include <cmath>#include <cstring>#include <string>#include<iostream>#include<algorithm>#include<cstring>#include <cstdio>#include <map>using namespace std;char b[100005];//模拟栈map<char ,int >d;//用来记录字符出现的次数map<char ,int >p;//用来标记栈里是否出现过字符int main(){ string a; while(cin>>a) { int l=strlen(&a[0]); for(int i=0;i<l;i++) { d[a[i]]++; p[a[i]]=1; } char x='~';//此处为代码微调。和manacher的前缀一样。。具体的 , 我只是调的能ac了,具体我也不知道为啥。 d[x]=100; p[x]=1; int j=0; b[j]='~'; for(int i=0;i<l;i++) { //cout<<p[a[i]]<<' '<<a[i]<<' '<<d[a[i]]<<endl; while(a[i]<b[j]&&d[b[j]]>0&&p[b[j]]==0&&p[a[i]]==1)//判定就是,把最小的放在前面,然后 出栈 { p[b[j]]=1; b[j]='~'; j--; } //cout<<j<<endl; if(j<0) j=0; if(a[i]!=b[j]&&p[a[i]]) { p[a[i]]=0; j++; b[j]=a[i]; }d[a[i]]--;//每次的把字符数量减去1 //cout<<b<<endl; } for(int i=1;b[i];i++) cout<<b[i]; cout<<endl; }}
0 0
- 51nod 1255 字典序最小的子序列 神奇的栈用法
- 51nod 1255 字典序最小的子序列
- 51nod-1255 字典序最小的子序列
- 51nod 1255 字典序最小的子序列
- 【51Nod 1255】字典序最小的子序列
- 51nod 1255 字典序最小的子序列【贪心】
- 51nod 1255 字典序最小的子序列 []【贪心】
- 51NOD 1255 字典序最小的子序列 【贪心】
- 51nod 1255 字典序最小的子序列(贪心)
- 51 nod 1255 字典序最小的子序列
- 51nod 1255 字典序最小的子序列(贪心)
- 51 nod 1255 字典序最小的子序列
- 51nod 1255 字典序最小的子序列 贪心
- 51 nod 1255 字典序最小的子序列(单调栈 贪心)
- 51Nod-1255-字典序最小的子序列
- 51nod -1255 字典序最小的子序列(贪心)
- 1255 字典序最小的子序列
- 字典序最小的子序列
- PHP+Ajax点击加载更多内容 -这个效果好,速度快,只能点击更多加载,不能滚动自动加载
- 20161228:for pyhton网络数据采集02
- Java 与 Arduino uno 使用 RXTX串口通信
- freemaker介绍及常见用法
- Eclipse+Maven创建webapp项目
- 51nod 1255 字典序最小的子序列 神奇的栈用法
- PL/SQL--变量
- 《社会很单纯,复杂的是人-雾满拦江》
- HTTP协议
- PDF文件能编辑吗?怎么编辑PDF文件?
- java 多线程2
- HTTP协议浅析(中):请求报文和响应报文
- iOS开发 - 数字快速变化到指定数字
- 设置VC6搜索路径