码迷,mamicode.com
首页 > 其他好文 > 详细

最小表示法 (模板)

时间:2020-04-14 01:16:07      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:i++   har   ima   例题   str   code   char   贪心   字典   

作用

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

原理

详见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

最小表示法 (模板)

标签:i++   har   ima   例题   str   code   char   贪心   字典   

原文地址:https://www.cnblogs.com/limil/p/12695010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!