zoukankan      html  css  js  c++  java
  • 最小(最大)表示法

    最小表示法是求与某个字符串循环同构的所有字符串中,字典序最小的串是哪个。比如说一个字符串jdrakioi,它长为8,也就是说最多有八种循环同构的方法。jdrakioi、drakioij、rakioijd、akioijdr、kioijdra、ioijdrak、oijdraki、ijdrakio。这几个串在原串上的开始位置分别是0,1,2,3,4,5,6,7。

    首先 我们 定义三个变量 i j,k 分别表示 从下标i和下标j开始有k个字符相同

    所以当 s[i]==s[j]时就有 k++;

    当 s[i]>s[j]时 就说明 以i开头的字符串不能可能是最小表示 则 i=i+k+1;

    反之则 j=j+k+1;

    int get_min(string s){
        int len=s.length();
        int i=0; int j=1; int k=0;
        while(i<len&&j<len&&k<len){
            int t=s[(i+k)%len]-s[(j+k)%len];
            if(!t) k++;
            else{
                if(t>0) i+=(k+1); //s[i]>s[j] i推进 
                else j+=(k+1);
                if(i==j) j++;
                k=0;
            }
        }
        return i>j?j:i;
    }
  • 相关阅读:
    [数据结构] N皇后问题
    [2011山东ACM省赛] Sequence (动态规划)
    yaf 学习
    nginx 配置文件
    nginx.conf 理解
    fastcgi
    Nginx+FastCGI运行原理
    ssh-key 原理
    Git是个啥 ssh是个啥
    Git SSH Key 生成步骤
  • 原文地址:https://www.cnblogs.com/wmj6/p/10516439.html
Copyright © 2011-2022 走看看