题解 | #最大子序列#

最大子序列

https://www.nowcoder.com/practice/17ba5b5df1fc49ca8d6cf8ea407b1972

/*想获得最大字典序子序列,就要第一次挑字符串中最大字符加入答案,然后从这个字符串下一个位置开始,继续找最大的加入答案;
总结就是让答案中越靠前的字符串越大,同时又要满足答案是子序列;

*/

#include <bits/stdc++.h>
using namespace std;
string ans;

void solve(int index,string s){
    if(index==s.size()){//递归出口,可能性一,最后一个字符为某次递归最大字符,下一次递归后,index为s.size
        return;
    }
    if(index==s.size()-1){//递归出口,可能性二,最后一个字符除了最后只剩自己,它不是任何一次递归最大字符,自己就不和自己比了,直接加进去完事
        ans+=s[index];
        return;
    }
    char max=s[index];
    int idx=index;
    for(int i=index+1;i<s.size();i++){//找到剩余字符中最大的加入答案
        if(max<s[i]){
            max=s[i];
            idx=i;
        }
    }
    ans+=s[idx];
    solve(idx+1,s);//加入最大后,在后面的字符串再找最大的
}


int main() {
    string str;
    cin>>str;
    solve(0,str);
    cout<<ans;
    return 0;

}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务