这里写代码片
///字符串的最大/最小表示法
///一个串 S = ababc,则其所有的循环同构串为 ababc,babca,abcab,bcaba,cabab.
///最小表示法求得是所有同构串儿中字典序最小的起点pos
///最大表示法求得是所有同构串儿中字典序最大的起点pos
///默认是从起点处顺序往下走。
///flag=1;最小
///flag=0;最大
int get_string(char *s,int flag)
{
int i=0,j=1,k=0,len=strlen(s);
while(i<len&&j<len&&k<len)
{
int t=s[(i+k)%len]-s[(j+k)%len];
if(t==0) { k++;}
else if(flag==1)
{
if(t>0) i+=k+1;
else j+=k+1;
if(i==j) j++;
k=0;
}
else if(flag==0)
{
if(t>0) j+=k+1;
else i+=k+1;
if(i==j) j++;
k=0;
}
}
return min(i,j)+1;
}
字符串匹配
最新推荐文章于 2021-08-16 20:30:25 发布