字符串最小表示法
Posted xiaoguapi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串最小表示法相关的知识,希望对你有一定的参考价值。
第一种
int get_minstring(char s[]) { int n =strlen(s); int i = 0, j = 1, k; while (i < n&&j < n) { for (k = 0; k < n&&s[(j + k) % n] == s[(i + k) % n]; k++); if (k == n) break; if (s[(i + k)%n]>s[(j + k)%n]) { i = i + k + 1; if (i == j) i++; } else { j = j + k + 1; if (i == j) j++; } } return min(i, j); }
第二种
int get_minstring(char s[]) { int n = strlen(s + 1); for (int i = 1; i <= n; i++) s[n + i] = s[i]; int i = 1, j = 2,k; while (i <= n&&j <= n) { for ( k = 0; k < n&&s[j + k] == s[i + k]; k++); if (k == n) break; if (s[i + k]>s[j + k]) { i = i + k + 1; if (i == j) i++; } else { j = j + k + 1; if (i == j) j++; } } return min(i, j); }
以上是关于字符串最小表示法的主要内容,如果未能解决你的问题,请参考以下文章