题解 | #最大子序列#
最大子序列
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")