51nod 1255 字典序最小的子序列

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思路:用栈来存取,如果栈最上面的比当前的要大并且后面还有这个栈最上面的,就可以将他pop
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4
 5 map<char ,int > ma,mb;
 6 stack<char > a;
 7 set<int > ss;
 8 int main(){
 9     string s;
10     cin>>s;
11     for(int i=0;i<s.size();i++){
12         ma[s[i]]++;
13     }
14     a.push(s[0]);
15     mb[s[0]]=1;ma[s[0]]--;
16     for(int i=1;i<s.size();i++){
17         ma[s[i]]--;
18         if(mb[s[i]]) continue;
19         while(!a.empty()&&a.top()>s[i]&&ma[a.top()]>0){
20             mb[a.top()]=0;
21             a.pop();
22            // if(a.empty()) break;
23         }
24         a.push(s[i]);
25         mb[s[i]]=1;
26     }
27     string s1="";
28     while(!a.empty()){
29         s1+=a.top();
30         a.pop();
31     }
32    for(int i=s1.size()-1;i>=0;i--)
33     cout<<s1[i];
34 }
时间: 2024-10-12 21:32:57

51nod 1255 字典序最小的子序列的相关文章

C - 字典序最小的子序列 51nod1255

C - 字典序最小的子序列 Time Limit: 4000/2000 MS (Java/Others)      Memory Limit: 1280000/640000 KB (Java/Others) Submit Status Problem Description 给出一个由a-z组成的字符串S,求他的一个子序列,满足如下条件:1.包含字符串中所有出现过的字符各1个.2.是所有满足条件1的串中,字典序最小的.例如:babbdcc,出现过的字符为:abcd,而包含abcd的所有子序列中,

51Nod1255 字典序最小的子序列

Problem 给出一个由a-z组成的字符串S,求他的一个子序列,满足如下条件: 1.包含字符串中所有出现过的字符各1个. 2.是所有满足条件1的串中,字典序最小的. 例如:babbdcc,出现过的字符为:abcd,而包含abcd的所有子序列中,字典序最小的为abdc. Solution 一个栈,当前没有在栈内,栈顶不是最后一个,且当前更小,就出1个入1个. Code #include<iostream> #include<stdio.h> #include<algorith

51nod 1255 贪心/构造

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1255 1255 字典序最小的子序列 题目来源: 天津大学OJ 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 给出一个由a-z组成的字符串S,求他的一个子序列,满足如下条件: 1.包含字符串中所有出现过的字符各1个. 2.是所有满足条件1的串中,字典序最小的. 例如:babbdcc,出现过的字符为:abcd,而包含abcd

3532: [Sdoi2014]Lis 最小字典序最小割

3532: [Sdoi2014]Lis Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 865  Solved: 311[Submit][Status][Discuss] Description 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案.如果有多种方案,请输出将删去项的附加属性排序之后,字典序最小的一种. 这题难点在如何求一组最小字典序最小的最小

最大子序列和,最小子序列和,最小正子序列和,最大子序列乘积

来自:<数据结构与算法分析——C语言描述>练习2.12 一. 最大子序列和 1.穷举法,O(N3) 1 int maxSequenceSum1(const int A[], int N) 2 { 3 int i, j, k, maxSum, thisSum; 4 5 maxSum = 0; 6 for (i = 0; i < N; i++) 7 { 8 for (j = i; j < N; j++) 9 { 10 thisSum = 0; 11 for (k = i; k <

ZOJ 3204 Connect them(最小生成树之Krusal 输出字典序最小的)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3367 You have n computers numbered from 1 to n and you want to connect them to make a small local area network (LAN). All connections are two-way (that is connecting computers i and j is

贪心:字典序最小问题

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} 贪心:字典序最小问题 给定长度为 n 的字符串 s,要构造一个长度为 n 的字符串 t.起初,t 是一个空串,随后反复进行下列操作 1. 从 s 的头部删除一个字符,加到 t 的尾部 2. 从 s 的尾部删除一个字符,加到 t 的尾部 求 t 是字典序尽可能小的字符串 示例: n = 6 s

[2016-05-09][51nod][1006 最长公共子序列Lcs]

时间:2016-05-09 21:12:54 星期一 题目编号:[2016-05-09][51nod][1006 最长公共子序列Lcs] 题目大意:[2016-05-09][51nod][1006 最长公共子序列Lcs].md 分析:动态规划 dp[i][j] 表示字符串A以第i个位置 ,字符串B以第j个位置的最长公共子序列的长度 dp[i][j] = dp[i - 1][j - 1] + 1 if a[i] == a[j] else dp[i][j] == max(dp[i - 1][j] ,

poj 1815 Friendship 字典序最小+最小割

题目链接:http://poj.org/problem?id=1815 In modern society, each person has his own friends. Since all the people are very busy, they communicate with each other only by phone. You can assume that people A can keep in touch with people B, only if 1. A kno