面试:字符串字典序最大的子序列

Posted leon-ldy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试:字符串字典序最大的子序列相关的知识,希望对你有一定的参考价值。

字符串字典序最大的子序列

  • 首先要知道什么是字典序,顾名思义,就是字典上的顺序。两个字符串进行对比时, 一位一位的按照a, b, c等字典序比较,如果相同就顺位比较下一位,比如ba比ab大,如果哪一位已经不一样 就已经比较出来结果了,如果是abc, abcd这样的情况,长度长的大。
  • 子序列和子串的区别;这俩其实不一样,子串是连续的,比如字符串abcdef,它的子串是abc,abcd等这些连续的。而子序列是不连续的。比如ace这样的。
  • 最简单的想法,先遍历一遍,找到最大的一个字符,以及他的位置,然后从这个位置开始往后遍历,找到后面最大的字符串以及位置,再继续下去,很明显,这样的算法复杂度比较高,N^2的复杂度。
  • 这里提供一个解决方案。用一个变量保存遍历到当前的最大值,从后往前遍历,如果字符比变量大,就更新最大值。记录字符。最后逆向输出字符就ok;附上代码
char str[100000 + 10];
char ans[100000 + 10];
int main()
{
    cin>>str;
    int maxnum = -1;
    int pos = -1;
    int lenstr = strlen(str);
    int ansflag = 0;
    for(int i = lenstr - 1; i >= 0; i--){
        if(str[i] - '0' >= maxnum){
            maxnum = str[i] - '0';
             
            ans[ansflag++] = str[i];
        }
    }
    for(int i = strlen(ans) - 1;i>=0;i--)
    cout<<ans[i];
    cout<<endl;
}

题目是有提交的地址,字典序最大的子序列

祝你成功~

以上是关于面试:字符串字典序最大的子序列的主要内容,如果未能解决你的问题,请参考以下文章

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

51Nod1255 字典序最小的子序列

nowcoder-练习赛16

[补题]找到原序列长度k的子序列中字典序最小的那个(单调栈)

牛客牛客练习赛16(未完)

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