最小表示法 (模板)

Posted limil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小表示法 (模板)相关的知识,希望对你有一定的参考价值。

作用

用于求一个串的字典序最小的循环串

原理

详见oi-wiki 最小表示法
算法思想是贪心。

int findmin(char *s) {
    int k = 0, i = 0, j = 1;
    while (k < n && i < n && j < n) {
        if (s[(i + k) % n] == s[(j + k) % n]) {
            k++;
        } else {
            //核心代码,注意i和j的转跳。
            if(s[(i + k) % n] > s[(j + k) % n]) i = i + k + 1; 
            else j = j + k + 1;
            
            if (i == j) i++; 
            k = 0;
        }
    }
    return min(i, j); //较小的那个值保证是对的
}

例题

HDU2609 - How many

以上是关于最小表示法 (模板)的主要内容,如果未能解决你的问题,请参考以下文章

字符串最大最小表示法模板 ( 字典序最大最小 )

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段1——vue主模板

3366 模板最小生成树(Kruskal)

VSCode自定义代码片段2——.vue文件的模板

VSCode自定义代码片段(vue主模板)