最小表示法(模板)

求一个字符串的最小表示法:
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#define maxn 100002
using namespace std;
char s[maxn];
int getminsub(char s[]){
    int i=0,j=1,k=0,l=strlen(s);
    while (i<l&&j<l&&k<l){
        if (k==l) break;
        if (i==j) ++j;
        int ni=i+k,nj=j+k;
        if (ni>l) ni-=l;
        if (nj>l) nj-=l;
        if (s[ni]>s[nj]){ i=ni+1; k=0;}
        else if (s[ni]<s[nj]){ j=nj+1; k=0;}
        else ++k;
    }
    return i;
}

int main(){
    scanf("%s",s);
    cout<<getminsub(s);
    return 0;
}

你可能感兴趣的:(最小表示法(模板))