当前位置: 代码迷 >> 综合 >> ZCMU--4922: 后缀子串排序
  详细解决方案

ZCMU--4922: 后缀子串排序

热度:72   发布时间:2023-12-06 10:07:50.0

Description

对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n
然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain

Input

每个案例为一行字符串。

Output

将子串排序输出

Sample Input

grain

banana

Sample Output

ain

grain

in

n

rain

a

ana

anana

banana

na

nana

解析:这题主要问题是怎么把后缀字符串提炼出来,为此我们利用结构体数组来存储后缀字符串,设字符串长度为len,设一个s用来定位,s=len时,设输入grain,s~len就是n,s=len-1时,s~len就是in,以此s从len推到0,再每个遍历存入结构体中,排序输出就好。

#include <bits/stdc++.h>
using namespace std;
struct su{char zi[1005];	//存储后缀字串 bool operator<(const su&x)const{	//sort排序方式 return strcmp(zi,x.zi)<0;}
}arr[1005];
char k[1005];	//原始字符串 
int main()
{int len,i,p,s,l;	//len是字符串长度 while(~scanf("%s",k)){i=0;memset(arr,'\0',sizeof(arr));	//得清空,不然会有残留 len=strlen(k);s=len-1;	//初始定位最后一个字母  while(s>=0){p=0;for(l=s;l<len;l++){arr[i].zi[p++]=k[l];	//存储后缀字符 }i++;s--;}sort(arr,arr+len);	 for(i=0;i<len;i++){printf("%s\n",arr[i].zi);}}	return 0;
}