码迷,mamicode.com
首页 > 其他好文 > 详细

字符串的最大最小表示法 模板

时间:2014-10-09 15:09:54      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   sp   div   c   

#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;
}

 

字符串的最大最小表示法 模板

标签:style   blog   color   io   os   ar   sp   div   c   

原文地址:http://www.cnblogs.com/Blundering-Chen/p/4012574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!