zoukankan      html  css  js  c++  java
  • 九度OJ 1099:后缀子串排序 (排序)

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:3439

    解决:1491

    题目描述:

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

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

    输入:

    每个案例为一行字符串。

    输出:

    将子串排序输出

    样例输入:
    grain
    样例输出:
    ain
    grain
    in
    n
    rain
    来源:
    2010年上海交通大学计算机研究生机试真题

    思路:

    可以将字符串分解后拷贝到一个字符串数组中,然后快速排序。

    但拷贝过程实际上可以避免,考虑设置一个指针数组,分别指向字符串的不同位置,对指针数组进行排序即可。

    该题对时间要求不高,暂时并未实现后一种方法。


    代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    #define N 1000
     
    int cmp(const void *a, const void *b)
    {
        return strcmp((char *)a, (char *)b);
    }
     
    int main(void)
    {
        int i, j, k, n;
        char s[N][N];
     
        while (scanf("%s", s[0]) != EOF)
        {
            n = strlen(s[0]);
            for(i=1; s[0][i]; i++)
            {
                k = 0;
                for(j=i; s[0][j]; j++)
                    s[i][k++] = s[0][j];
                s[i][k] = '';
            }
            qsort(s, n, sizeof(s[0]), cmp);
            for(i=0; i<n; i++)
                printf("%s
    ", s[i]);
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1099
        User: liangrx06
        Language: C
        Result: Accepted
        Time:0 ms
        Memory:1824 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    good array(数论+随机算法)
    triple balance(贪心+构造)
    树上拓扑排序(交互题)
    模数循环节
    string操作总结
    移除相邻(string操作+implement)
    二维树状数组(单点更新+区间查询)
    docker mysql Client does not support
    Docker 常见问题
    Linux安装 Docker
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083933.html
Copyright © 2011-2022 走看看