CH3-UVA1584

2016-11-18  本文已影响9人  sixleaves
题目:

题目很简单。给出一个字符串, 将字符串看成是一个环形的串。如果长度为n, 则这个环形串有n中读取方式。求出最小的子串。

API:
//
// Created by sixleaves on 16/11/18.
//

#include <cstdio>
#include <cstring>

char input[126];
char circleInput[126];
char minCircle[126];
void circleStringWithPos(int pos, char *initStr, char *out) {

    int len = strlen(initStr);
    int s = pos;
    for (int i = 0; i < len; i++) {
        out[i] = initStr[(s + i) % len];
    }

    out[len] = '\0';

}

int main() {

    int n;
    while (scanf("%d" , &n) == 1 && n) {

        for (int i = 0; i < n; i++) {
            memset(input, 0, sizeof(input));
            memset(input, 0, sizeof(circleInput));
            memset(input, 0, sizeof(minCircle));
            scanf("%s", input);

            int len = strlen(input);
            strncpy(minCircle, input, len + 1);
            for (int p = 0; p < len; p++) {
                circleStringWithPos(p, input, circleInput);
                if (strcmp(circleInput, minCircle) < 0) {
                    strncpy(minCircle, circleInput, len + 1);
                }
            }
            printf("%s\n", minCircle);

        }
    }
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读