zoukankan      html  css  js  c++  java
  • 字符串最小表示

    字符串最小表示是指一个给定一个字符串,从特定的为止开始比如说abc可以使bca也可以是cab在这些表示中间,abc是字典序最小的,则abc就是这个字符串的最小表示。字符串最小表示的暴力方法很容易想,就是枚举每一个位置的字符为起始字符,分别比较字典序大小。而我们今天要讨论的是一个O(n)的算法,在线性时间内找到一个字符串的最小表示比如说一个字符串bacad我们一样去找字符串的初始位置,只是不再去全部枚举完所有的字符,比如说,我们知道b>a那么第一个位置肯定不是字符串最小表示的位置,而在两个a的地方,我们需要往下比较,因为c<d所以,第二个a也不是最小表示的位置,以此类推,最后可以确定一个最小表示的开始位置

    View Code
     1 int minr(char *s)
     2 {
     3     int i=0,j=1,k=0;
     4     int l=strlen(s);
     5     while(i<l&&j<l&&k<l)
     6     {
     7         if(s[(i+k)%l]==s[(j+k)%l])
     8         k++;
     9         else
    10         {
    11             if(s[(i+k)%l]>s[(j+k)%l])
    12             {
    13                 i+=(k+1);
    14                 if(i==j)
    15                 i++;
    16             }
    17             else
    18             {
    19                 j+=(k+1);
    20                 if(i==j)
    21                 j++;
    22             }
    23             k=0;
    24         }
    25     }
    26     return min(i,j);
    27 }
  • 相关阅读:
    获取文件当前目录及其大小
    PLC工作原理动图,一图搞懂一个原理
    欧拉角的详解
    欧拉角的详解
    PLC/Pragmas
    ASCII码对照表
    C++ 的关键字(保留字)完整介绍
    C++ 基本语法
    pytorch笔记1
    pytorchnum_flat_features(x)
  • 原文地址:https://www.cnblogs.com/caozhenhai/p/2510969.html
Copyright © 2011-2022 走看看