环状序列

题目来自 刘汝佳 所编著的《算法竞赛入门经典(第二版)》

题目描述:

输入案例:

2

CCTC

CGAGTCAGCT

输出案例:

CCCT

AGCTCGAGT

答案代码:

#include<iostream>
#include<cstring>
using namespace std;
#define maxn 105
int Less(const char * s, int p, int q)
{
    int n = strlen(s);
    for (int i = 0; i < n; i++)
        if (s[(p + i) % n] != s[(q + i) % n])
            return s[(p + i) % n] < s[(q + i) % n];
    return 0;
}
int main() 
{
    int T;
    char s[maxn];
    cin >> T;
    while(T--)
    {
        cin >> s;
        int ans = 0;
        int n = strlen(s);
        for (int i = 1; i < n; i++)
            if (Less(s, i, ans)) ans = i;
        for (int i = 0; i < n; i++)
            putchar(s[(i + ans) % n]);
        putchar('
');
    }
    return 0;
}

希望有大神能够提供更好的算法思路!博主没能自己想出来方法(;′⌒`)。

原文地址:https://www.cnblogs.com/Breathmint/p/7239258.html