字符串最小表示模板
#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)); }}另外判断两个字符串是否同构,方法和上面是类似的,具体参见 周源的论文《浅析“最小表示法”思想在字符串循环同构问题中的应用》