zoukankan      html  css  js  c++  java
  • 字符串的最小表示法(模板)

    对于一个循环字符串S,S中存在一种表示方法S' ,使的S' 的字典序最小。

    设 S = 3 2 2 4 5

    我们只需要2个指针 i, j 和一个参数 k = 0。i= 0, j = 1。

    如果 S[i+k] == S[j+k] , k++;

    如果 S[i+k] < S[j+k] , j = j+k+1;

    如果 S[i+K] > S[i+k] , i = i + k + 1;

      i = j , j++;

    一开始 3 2。满足S[i+k] > S[j+k] 。所以最小的位置不在 i +k 的地方 ,所以i = i+k+1 = 1。因为 i= j = 1。j++, 还要初始化k = 0;

    S[2] = S[3], 所以k++。

    S[2+1] < S[3+1]。 j = j+k+1。原因就是:i到i+k的序列为[2, 2], 而 j 到 j + k 的序列为 [2, 4], 所以在[j, j+k] 这段里面都不可能使最小的位置。k初始化。

    S[2] < S[5] 。 所以i = 2 使最小S’ 的开始位置。

    S' = 2 2 4 5 3

     1 int getMinRepresentation(int *s, int n)
     2 {
     3     int i = 0, j = 1, k = 0;
     4     while(i < n && j < n && k < n)
     5     {
     6         int t = s[(i + k) % n] - s[(j + k) % n];
     7         if(!t) k++;
     8         else
     9         {
    10             if(t > 0) i += k + 1;
    11             else j += k + 1;
    12             if(i == j) j++;
    13             k = 0;
    14         }
    15     }
    16     return i < j ? i : j;
    17 }
  • 相关阅读:
    图片自适应居中
    常用正则记录
    继承
    HTML学习
    js原型与原型链理解
    mac 及mac下开发常用快捷键命令
    服务器返回的各种HTTP状态码介绍(转)
    webstorm使用笔记
    《Javascript Dom 高级程序设计》读书笔记
    ECMAScript6学习笔记
  • 原文地址:https://www.cnblogs.com/denghaiquan/p/7207614.html
Copyright © 2011-2022 走看看