牛客练习赛16 A-字典序最大的子序列

链接:https://www.nowcoder.com/acm/contest/84/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给定字符串s,s只包含小写字母,请求出字典序最大的子序列。
子序列:https://en.wikipedia.org/wiki/Subsequence
字典序:https://en.wikipedia.org/wiki/Lexicographical_order

输入描述:

一行一个字符串s (1 <= |s| <= 100,000)。

输出描述:

字典序最大的子序列。
示例1

输入

ababba

输出

bbba
示例2

输入

abbcbccacbbcbaaba

输出

cccccbba

分析:贪心。字典序最大的子序列必然是非递减的,然后从主串末尾
开始遍历,遇到大于或等于之前最大字符的字符就记录下来,
更新最大字符,最后逆向输出。

#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;
}
 
View Code




原文地址:https://www.cnblogs.com/ACRykl/p/8964643.html