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


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

  • 首先要知道什么是字典序,顧名思義,就是字典上的順序。兩個字符串進行對比時, 一位一位的按照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;
}

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

祝你成功~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM