最小表示法使用于解决字符串最小表示问题的方法。何为字符串的最小表示呢?
循环同构:当字符串
字符串
求解算法
朴素算法
每次比较
实现:
cpp
int min_rep(string s) {
int n = s.size(), i = 0, j = 1, k = 0;
while (k < n && i < n && j < n) {
if (s[(i + k) % n] == s[(j + k) % n]) k++;
else {
if (s[(i + k) % n] > s[(j + k) % n]) i++;
else j++;
k = 0;
if (i == j) i++;
}
}
return min(i, j);
}优化算法
考虑一对字符串
如果
cpp
int min_rep(string s) {
int n = s.size(), i = 0, j = 1, k = 0;
while (k < n && i < n && j < n) {
if (s[(i + k) % n] == s[(j + k) % n]) k++;
else {
if (s[(i + k) % n] > s[(j + k) % n]) i = i + k + 1;
else j = j + k + 1;
k = 0;
if (i == j) i++;
}
}
return min(i, j);
}