字符串最小表示法

 

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int sublater(char *s){
 4     int i,j,k,t;
 5     int n=strlen(s);
 6     printf("###\n");
 7     for( i=0 , j=1 ; j<n ; ){
 8         for(k=0 ; k+j<n && s[i+k]==s[j+k] ; k++);
 9             if( s[i+k]>=s[j+k] ){
10                 t=i+k;
11                 i=j;
12                 j=max(t,j+1);
13             }
14             else{
15                 j+=k+1;
16             }
17 
18     }
19     return i;
20 }
21 int main()
22 {
23     char s[1000]="ayabadcee";
24     int t=sublater(s);
25     printf("%s\n",s+t);
26     return 0;
27 }
View Code

 

posted @ 2019-08-27 11:29  Osea  阅读(184)  评论(0编辑  收藏  举报