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

    #include<iostream>
    #include<string>
    using namespace std;
    /*
    用最小表示法求字符串S的最小字典序
    返回字典序最小的串的首字母位置
    */
    int minstr(char s[])
    {
        int len=strlen(s);
        int i=0,j=1;
        while(i<=len-1 && j<=len-1)
        {
            int k=0;
            while(k<=len-1 && s[(i+k)%len]==s[(j+k)%len])
                k++;
            if(k>=len)
                break;
            if(s[(i+k)%len]>s[(j+k)%len])
                i=max(i+k+1,j+1);////此时s[i+1]到s[i+k]都不可能是最小字符串的开头,而且s[i+1]到s[j]也不可能是最小字符串的开头(s[i]开头的字符串与s[j]开头的字符串在比较,本身已经说明s[i]开头的字符串小于以s[i+1]开头到以s[j-1]开头的字符串了)
            else
                j=max(j+k+1,i+1);//同上道理
        }
        return min(i,j);
    }
    /*
    用最大表示法求字符串S的最大字典序
    返回字典序最大的串的首字母位置
    */
    int maxstr(char s[])
    {
        int len=strlen(s);
        int i=0,j=1;
        while(i<=len-1 && j<=len-1)
        {
            int k=0;
            while(k<=len-1 && s[(i+k)%len]==s[(j+k)%len])
                    k++;
            if(k>=len)
                break;
            if(s[(i+k)%len]<s[(j+k)%len])
                i=max(i+k+1,j+1);
            else
                j=max(j+k+1,i+1);
        }
        return min(i,j);
    }
    int main()
    {
    
    
    return 0;
    }
  • 相关阅读:
    poj1743Musical Theme
    poj1743Musical Theme
    poj2774最长公共子序列(后缀数组)
    病毒侵袭
    阿狸的打字机(AC自动机+fail树)
    阿狸的打字机(AC自动机+fail树)
    bzoj3172 AC自动机+fail树
    HDU2222(AC自动机)
    HDU2222(AC自动机)
    _itoa进制转换
  • 原文地址:https://www.cnblogs.com/Blundering-Chen/p/4012574.html
Copyright © 2011-2022 走看看