字符串最小示意模板

字符串最小表示模板#includecstdio#includecstring#includealgorithmusing namespace stdint gao(c

字符串最小表示模板


#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int gao(char *a,int len){    int i=0,j=1,k=0;    while(i<len && j<len && k<len){        int cmp = a[(j+k)%len]-a[(i+k)%len];        if(cmp==0)            k++;        else{            if(cmp>0)                j+=k+1;            else                i+=k+1;            if(i==j)j++;            k=0;        }    }    return min(i,j);}int main(){    char s[100];    int len;    while(scanf("%s",s)==1){        len=strlen(s);        printf("%d\n",gao(s,len));    }}

另外判断两个字符串是否同构,方法和上面是类似的,具体参见  周源的论文《浅析“最小表示法”思想在字符串循环同构问题中的应用》