#include <iostream>
#include <string>
using namespace std;
/*
用最小表示法求字符串S的最小字典序
返回字典序最小的串的首字母位置
*/
int minSub(char * p)
{
int i=0,j=1,len=strlen(p),k=0;
while(i<len && j<len &&k< len)
{
if(k==len) break;
if(i==j) j++;
int ni=i+k , nj=j+k;
if(ni>=len) ni-=len;
if(nj>=len) nj-=len;
if(p[ni] > p[nj]) { i+=k+1; k=0; }
else if(p[ni] < p[nj]) { j+=k+1; k=0; }
else k++;
}
return i;
}/*注意返回的值是最小字典序字符串的首位置 这时候最小序列字符串依旧保存在pat中, 只不过开始位置为 该函数的返回值 假设为
a 则把a之后的字符放进一个我们准备好的字符串中 , 之后把a之前的字符继续放进去 这个新的字符串就是最小的了*/
最大表示法:
int getmax() //最大表示法
{
int len = strlen(pat);
int i=0,j=1,k=0;
while(i<len && j<len && k<len)
{
int