从一个字符串当中找到最大子串(字典序,可以不连续)

说明:字典序最大

比如ca>c  caa>ca cba>c 

#include<stdio.h>
#include<string.h>
#define MAXSIZE 1000

char str[MAXSIZE];
char res[MAXSIZE];

//从后向前找,后面的总是小于等于前面的才能保证字典序最大
//最后一个字符肯定包含在内

int main()
{
    int i;
    while(scanf("%s",str)!=0)
    {
        int len = strlen(str);
        int max = 0;
        int id = MAXSIZE;
        for(i=len-1;i>=0;i--)
        {
            if(str[i]>=max)
            {
              res[--id] = str[i];
              max = str[i];
            }
        }

        for(i=id;i<MAXSIZE;i++)
        {
            printf("%c",res[i]);
        }
        printf("\n");
    }
}

上面的算法只是需要O(n)的时间复杂度。


你可能感兴趣的:(数据结构字符串)