- 题目描述:
-
对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain
- 输入:
-
每个案例为一行字符串。
- 输出:
-
将子串排序输出
- 样例输入:
-
grain
- 样例输出:
-
ain grain in n rain
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN=10005; char s[MAXN]; int order[MAXN]; int len; bool comp(int x,int y) { while(x<len&&y<len) { if(s[x]==s[y]) { x++; y++; } else { return s[x]<s[y]; } } return x>y; } int main() { while(scanf("%s",s)!=EOF) { len=strlen(s); for(int i=0;i<len;i++) order[i]=i; sort(order,order+len,comp); for(int i=0;i<len;i++) { for(int j=order[i];j<len;j++) { printf("%c",s[j]); } printf(" "); } } return 0; }