链接:https://www.nowcoder.com/acm/contest/84/A
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给定字符串s,s只包含小写字母,请求出字典序最大的子序列。
子序列:https://en.wikipedia.org/wiki/Subsequence
字典序:https://en.wikipedia.org/wiki/Lexicographical_order
子序列:https://en.wikipedia.org/wiki/Subsequence
字典序:https://en.wikipedia.org/wiki/Lexicographical_order
输入描述:
一行一个字符串s (1 <= |s| <= 100,000)。
输出描述:
字典序最大的子序列。
示例1
输入
ababba
输出
bbba
示例2
输入
abbcbccacbbcbaaba
输出
cccccbba
分析:贪心。字典序最大的子序列必然是非递减的,然后从主串末尾
开始遍历,遇到大于或等于之前最大字符的字符就记录下来,
更新最大字符,最后逆向输出。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<cstdio> #include<cstring> using namespace std; char s[100010],sub[100010]; int main() { while(scanf("%s",s)!=-1) { int len=strlen(s),k=0; char Max=0; for(int i=len-1;i>=0;i--) { if(s[i]>=Max) { sub[k++]=s[i]; Max=s[i]; } } for(int i=k-1;i>=0;i--) printf("%c",sub[i]); printf(" "); } return 0; }