字符串最小表示法模版

 1 //O(n)
 2 char s[N],ss[N*2];
 3 int n=strlen(s+1);
 4 for(int i=1;i<=n;i++)
 5     ss[i+n]=s[i];
 6 int i=1,j=2,k;
 7 while(i<=n && j<=n){
 8     for(k=0;k<n && s[i+k] == s[j+k]; k++);
 9     if(k==n) break;
10     if(s[i+k]>s[j+k]){
11         i=i+k+1;
12         if(i==j)
13             i++;
14     }
15     else{
16         j=j+k+1;
17         if(i==j)
18             j++;
19     }
20 }
21 int ans=min(i,j);
22 //b[ans] 即最小表示

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12556502.html