美文网首页
字符串的最小表示法

字符串的最小表示法

作者: Gitfan | 来源:发表于2017-08-22 21:42 被阅读0次

字符串的循环同构:
设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的S’是adbc。
对于字符串循环同构的最小表示法,其问题实质是求S串的一个位置,从这个位置开始循环输出S,得到的S’字典序最小。
显然两个字符串循环同构的充分必要条件是这两个字符串的最小表示法相等。
字符串循环同构可以看这篇论文:点这里~

下面给出求最小表示法的模板:
函数返回一个位置,从这个位置开始循环输出S,得到的S’字典序最小。

int getMin(char *str)
{
    int i=0,j=1,k=0;
    int slen=strlen(str);
    while(i<slen&&j<slen&&k<slen)
    {
        int tmp=str[(i+k)%slen]-str[(j+k)%slen];
        if(tmp==0) k++;
        else
        {
            if(tmp>0) i=i+k+1;
            else j=j+k+1;
            if(j==i) j++;
            k=0;
        }
    }
    return min(i,j);
}

同理,求最大表示法只是把大于等于号的内容改一下

int getMax(char *str)
{
    int i=0,j=1,k=0;
    int slen=strlen(str);
    while(i<slen&&j<slen&&k<slen)
    {
        int tmp=str[(i+k)%slen]-str[(j+k)%slen];
        if(tmp==0) k++;
        else
        {
            if(tmp>0) j=j+k+1;
            else i=i+k+1;
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j);
}

相关文章

  • 字符串的最小表示法

    字符串的循环同构:设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而...

  • 字符串编码转换

    字符串编码转换 字符串编码转换涉及宽字节表示法与UTF-8表示法之间的转换、宽字节表示法与UTF-16表示法之间的...

  • 最小表示法(算法)(笔记)

    对于一个字符串,将其首尾相接,就能得到一个环形字符串。从不同的元素出发绕一圈,就会得到不同的字符串,最小表示法就是...

  • ECMAScript6--5.字符串扩展

    1.字符串新增特性 Unicode表示法 遍历接口 模板字符串 新增方法(10种)eg:1.Unicode表示法{...

  • Linux基础篇-第十一章-正规表示法与文件格式化处理

    常用指令 什么是正规表示法 简单的说,正规表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为, 正规...

  • ES6字符串的扩展

    字符的 Unicode 表示法 codePointAt() String.fromCodePoint() 字符串的...

  • linux正则表达式

    1. 什么是正则表达式 正规表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为, 正规表示法透过一些...

  • ES6-基础数据类型新增的方法[String]

    字符串的扩展 字符的 Unicode 表示法 codePointAt() String.fromCodePoint...

  • 字符串扩展

    Unicode表示法\u{} codePointAt() String.formCodePoint() 字符串变遍...

  • ES6扩展

    一.字符串的扩展 1.字符串的Unicode表示法。 2.codePointAt() 3.String...

网友评论

      本文标题:字符串的最小表示法

      本文链接:https://www.haomeiwen.com/subject/tckrdxtx.html