字符串字典序最大的子序列
- 首先要知道什么是字典序,顧名思義,就是字典上的順序。兩個字符串進行對比時, 一位一位的按照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;
}
題目是有提交的地址,字典序最大的子序列
祝你成功~