现在的位置: 首页 > 综合 > 正文

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

2012年11月20日 ⁄ 综合 ⁄ 共 1394字 ⁄ 字号 评论关闭
题目1099:后缀子串排序

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:1224

解决:481

题目描述:

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

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

输入:

每个案例为一行字符串。

输出:

将子串排序输出

样例输入:
grain
样例输出:
ain
grain
in
n
rain
来源:
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;
}

抱歉!评论已关闭.