题目描述:
对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n
然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain
输入:
每个案例为一行字符串。
输出:
将子串排序输出
样例输入:
grain
样例输出:
ain
grain
in
n
rain
代码:
#include "string"
#include <iostream>
using namespace std;
int main()
{
string str;
while (cin>>str)
{
int len = str.size();
int pos = 0;
int *visited=new int[len];
int i = 0;
while (i<len)//共寻找len次最小子串
{
string minsub(1000,'z');//设定近似最大子串(至少你的测试串均小于次字符串)
pos = i;
//寻找最小子串
for (size_t j = 0; j < len; j++)
{
string stepsub(str, j, len - j);
if ( visited[j] != 1 && minsub > stepsub)
{
minsub = stepsub;
pos = j;
}
}
visited[pos] = 1;
cout << minsub << endl;
i++;
}
}
return 0;
}