zoukankan      html  css  js  c++  java
  • 最小最大表示法,求环形字符串的最小最大字典树(模板)

    最小表示法:

       初始时,i=0,j=1,分别以i,j,为起始点顺着i,j,往下比较直到找的str[i+k]!=str[j+k],然后分两种情况考虑:

    1、  str[i+k]>str[j+k],i变成i=i+k+1,j不变,然后继续往下比较。

    2、  str[i+k]<str[j+k],j变成j=j+k+1,i不变,然后继续往下比较。

    直到i或j大于串长,找较小者。

     

    int work(int m)
    {
        int i,j,l;
        i=0; j=1;
        while(i<m && j<m)
        {
            for(l=0;l<m;l++) 
                if(str[(i+l)%m]!=str[(j+l)%m]) break;
            if(l>m) break;
            if(str[(i+l)%m] > str[(j+l)%m])
                i=i+l+1;
            else
                j=j+l+1;
            if(i==j) j=i+1;
        }
        if(i<j) return i;
        return j;
    }
    

     最大表示法,返回最大字典序:

    int work(int len,char pat[])  //最大表示法
    {
       //int len = strlen(pat);
       int i=0,j=1,k=0;
       while(i<len && j<len && k<len)
       {
           int t = pat[(i+k)%len] - pat[(j+k)%len];
           if(!t) k++;
           else
           {
               if(t>0) j = j+k+1;
               else i = i+k+1;
               if(i == j) j++;
               k = 0 ;
           }
       }
       return i<j?i:j;
    }
    
  • 相关阅读:
    MongoDB学习笔记(查询)
    PHP IP地址转换
    PHP SESSION的工作原理解析(转)
    JavaScript 之 RegExp 对象
    jquery 几个实用的小方法
    JS之document.cookie随笔
    CodeForces
    CodeForces
    翻转 -- CodeForces
    Codeforces --- 982C Cut 'em all! DFS加贪心
  • 原文地址:https://www.cnblogs.com/ziyi--caolu/p/3245132.html
Copyright © 2011-2022 走看看