HDU3374(String Problem)字符串-最小表示法+KMP

/*************************************************
题目大意:
求字典序最小的和字典序最大的位置,若有多个则取最左边的;
并给出该串在这n个串中出现的次数,即同构串的个数;

算法分析:
求字典序最小(大)的位置主要用到字符串的最小(大)表示法;
求同构串个数可以转换为求该串最小循环节的总个数;
涉及到KMP算法中的next函数;
**************************************************/
#include
#include
#include
#include
using namespace std;

const int M=1000010;//模式串的最大长度

char P[M];//模式串
int next[M];
int m;//模式串的实际长度

void GetNext()//计算模式串P的next函数
{
    int i=0,j=-1;
    next[0]=-1;
    while(i0)
                i+=k+1;
            else
                j+=k+1;
            if(i==j)
                j++;
            k=0;
        }
    }
    return i0)
                j+=k+1;
            else
                i+=k+1;
            if(i==j)
                j++;
            k=0;
        }
    }
    return i

你可能感兴趣的:(算法题解-字符串)