Circular Sequence 字符串处理

基本思路是枚举所有字符串情况,选出字典序最小的一个。

如何枚举呢?不如将头部字母加到尾部,这要只需要处理2个位置,如果按移动的做法,需要处理L个位置,无疑大大增加了时间复杂度,具体处理如下

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXD 500 + 10
using namespace std;
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        char str[MAXD];
        char temp[MAXD];
        scanf("%s",str);
        strcpy(temp,str);
        int L = strlen(str);
        for(int i = 1 ; i <= L ; i++){
            str[L + i - 1] = str[i-1];
            str[L + i] = '\0';
            if(strcmp(temp,str + i) > 0)
                strcpy(temp,str + i);
        }
        puts(temp);
    }
    return 0;
}


你可能感兴趣的:(Circular Sequence 字符串处理)