您的位置:首页 > 其它

字符串的最小表示法

2013-02-27 21:24 288 查看
把一个长为len的字符串围成一个圈,然后以任意一个字符作为起点,都会产生一个新的长为len的字符串,字符串的最小表示就是所有新字符串中字典序最小的那个。

下面这个函数就是解决这个问题的,返回值为字典序最小的串的在原串中的起始位置。

int MinimumRepresentation(char *s,int len) //串s[0~l-1]的最小表示位置
{
int i = 0, j = 1, k = 0,t;
while (i < len && j < len && k < len)
{
t = s[(i+k)%l] - s[(j+k)%l];
if (t == 0)
k++; //相等的话,检测长度加1
else
{
if (t > 0) //大于的话,s[i]为首的肯定不是最小表示,最大表示就改<
i += k + 1;
else
j += k + 1;
if (i == j)
j++;
k = 0;
}
}
return min(i,j);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: