字符串的最小表示法
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);
}
下面这个函数就是解决这个问题的,返回值为字典序最小的串的在原串中的起始位置。
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);
}
相关文章推荐
- 字符串-最小(大)表示法
- [转]浅析“最小表示法”思想在字符串循环同构问题中的应用-HDU2609
- 字符串最小表示法 O(n)算法
- 字符串的最小表示法
- HDU 4162 Shape Number(字符串,最小表示法)
- 【转载】字符串最小表示法-O(n)算法
- 环形字符串最小最大表示法
- hdu 2609(字符串最小表示法)
- 字符串同构最小最大表示法模板&&manacher模板
- BZOJ 2176: Strange string【字符串最小表示法
- HDU2609 How many(字符串的最小表示法)
- hunnu oj 11544 小明的烦恼——找字符串(字符串的最小表示法)
- 新生赛3 1003 字符串最小表示法题目
- 【理解字符串循环同构的最小表示法】
- 暑假训练Round1——G: Hkhv的水题之二(字符串的最小表示)
- poj1509 字符串最小表示法
- hdu 5442 F - Favorite Donut 后缀数组 / 字符串の最小表示法+kmp
- POJ1509——Glass Beads(字符串的最小表示法)
- 【理解字符串循环同构的最小表示法】
- 字符串循环同构的最小表示法(转)