当前位置: 代码迷 >> 编程 >> 9度OJ 题目1099:后缀子串排序
  详细解决方案

9度OJ 题目1099:后缀子串排序

热度:9274   发布时间:2013-02-26 00:00:00.0
九度OJ 题目1099:后缀子串排序
题目1099:后缀子串排序

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:1224

解决:481

题目描述:

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

然后对各子串按字典顺序排序,即: 
ain,grain,in,n,rain

输入:

每个案例为一行字符串。

输出:

将子串排序输出

样例输入:
grain
样例输出:
aingraininnrain
来源:
2010年上海交通大学计算机研究生机试真题
/**********************************   日期:2013-2-13*   作者:SJF0115*   题号: 九度OJ 题目1099:后缀子串排序*   来源:http://ac.jobdu.com/problem.php?pid=1099*   结果:AC*   来源:2010年上海交通大学计算机研究生机试真题*   总结:**********************************/#include<stdio.h>#include<stdlib.h>#include<string.h>//排序函数(二维字符串数组)int cmp(const void *a,const void *b){	return (strcmp((char*)a,(char*)b));}char str[1000][1000];char word[1000];int main(){	int i,len;	//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);	while(scanf("%s",word) != EOF)	{		len = strlen(word);		for(i = 0;i < len;i++){			//将其后缀子串复制到str数组中			strcpy(str[i],word+i);		}		//排序		qsort(str,len,sizeof(str[0]),cmp);		//输出		for(i = 0;i < len;i++){			puts(str[i]);		}	}	return 0;}
转载
#include <set>#include <iostream>#include <string>using namespace std;int main(){    string str;    while(cin >> str)    {        set<string> s;        s.insert(str);        while(str.size()>1)        {            str = str.substr(1);            s.insert(str);        }        set<string>::iterator it;        for(it=s.begin(); it!=s.end(); it++)            cout << *it << endl;    }    return 0;}

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;int main(){        string ss;        while(getline(cin,ss))        {                int i;                vector<string> vv(ss.size());                for(i = 0;i < ss.size();i++)                        vv[i] = ss.substr(i);                sort(vv.begin(),vv.end());                for(i = 0;i < vv.size();i++)                        cout << vv[i] << endl;        }        return 0;}