题解 | #最大子序列#

最大子序列

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")

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:47
机械打工仔:你自己匿名可以,这么好的公司就别给它匿名了
点赞 评论 收藏
分享
积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务