最大最小表示法
Posted myrtle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大最小表示法相关的知识,希望对你有一定的参考价值。
目的:已知一个串S,求S的循环的同构字符串S‘中字典序最大/最小的一个,输出其位置,place∈[0,n-1]
设S=bcad,S‘=bcad,cadb,adbc,dbca,最小表示的S‘是adbc,位置是2,最大表示的S‘是dbca,位置是3
时间复杂度:O(n)
自用模板:
int get_minstring(char *s) //最小表示法 int len=strlen(s); int i=0,j=1,k=0; while(i<len&&j<len&&k<len) int t=s[(i+k)%len]-s[(j+k)%len]; if(t==0) k++; else if(t>0) i=i+k+1; else j=j+k+1; if(i==j) j++; k=0; return min(i,j); int get_maxstring(char *s) //最大表示法 int len=strlen(s); int i=0,j=1,k=0; while(i<len&&j<len&&k<len) int t=s[(i+k)%len]-s[(j+k)%len]; if(t==0) k++; else if(t>0) j=j+k+1; else i=i+k+1; if(i==j) j++; k=0; return min(i,j);
...
以上是关于最大最小表示法的主要内容,如果未能解决你的问题,请参考以下文章