字典序算法
获得最近换位数的三个步骤:
1.从后向前查看逆序区域,找到逆序区域的前一位,也就是数字置换的边界
2.把逆序区域的前一位和逆序区域中刚刚大于它的数字交换位置
3.把原来的逆序区域转为顺序
这种解法拥有一个高大上的名字:字典序算法
题目描述
对于字符串x和y,如果擦除x中的某些字母(有可能全擦掉或者都不擦)能够得到y,我们就称y是x的子序列。例如."ncd"是"nowcoder"的子序列,而"xt"不是。
现在对于给定的一个字符串s,请计算出字典序最大的s的子序列。
- 输入描述:
输入包括一行,一个字符串s,字符串s长度length(1≤length≤50).
s中每个字符都是小写字母 - 输出描述:
输出一个字符串,即字典序最大的s的子序列。 - 输入示例:test
- 输出示例:tt
#include<iostream>
#include<string>
#include <algorithm>
using namespace std;
int main()
{
string s="test";
string t;
char max = 'a';//之前的思路总是差一点点,就是这里,应该设置为a而不是0
for (int i = s.size()-1; i >=0; i--)
{
if (s[i] >= max)
{
max = s[i];
t=max+t;
}
}
cout << t << endl;
system("pause");
return 0;
}