求字典序最大的子串 | ||||||
| ||||||
Description | ||||||
给定一串仅包含小写字母的字符串,找出字典序最大的子串。
对于字符串s, x和y是它的子串,x比y大,说明用C语言的字符串比较函数 strcmp(x, y) > 0。
如 s="ababba", x = "bbba", y="abaa" , x和y都是s的子串,x比y大。
| ||||||
Input | ||||||
有多组测试数据,每组测试一行,仅包含一个由小写字母组成的字符串,长度小于等于10^6。 | ||||||
Output | ||||||
对于每组测试数据,输出一行,为字典序最大的子串。 | ||||||
Sample Input | ||||||
ababba abbcbccacbbcbaaba | ||||||
Sample Output | ||||||
bbba cccccbba | ||||||
Source | ||||||
CodeForces Div124-1 |
题解:
看到最大的那一瞬间想到了dp ,,然而并不是啊。。。
贪心。。
什么是字典序最大的字串。就是从尾巴到头的最长非递减子序列
#include<stdio.h>
#include<string.h>
using namespace std;
char s[1000003];
char c[1000003];
int main()
{
while(~scanf("%s",s))
{
int l=strlen(s);
int n=1000000;
int max=0;
for(int i=l-1;i>=0;i--)
if(s[i]>=max)max=s[i],c[n--]=s[i];
for(int i=n+1;i<=1000000;i++)printf("%c",c[i]);printf("\n");
}
}