PTA刷题之KMP算法--记录自己的粗浅理解

 

来源是PTA的一道题,一开始是想用KMP算法来做,但是发现没有这么难,普通逻辑处理就可以

以下为题目:

L1-058 6翻了 (15分)

 

“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!

本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

输入格式:

输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。

输出格式:

从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。

输入样例:

it is so 666 really 6666 what else can I say 6666666666

输出样例:

it is so 666 really 9 what else can I say 27

 KMP算法的来源就不过介绍了,相关的文章也有很多,下面我结合代码讲下我自己的思路,希望对读了这篇文章的人加深点理解

void GetNext(string str,int next[] )
{//next下标从0开始
    int i = 0, j = -1;
    next[0] = -1;
    while (i<str.length()-1)
    {
        if (j == -1 || str[i] == str[j])
        {
             ++i; ++j; next[i] = j;
        }
        else
            j = next[j];
    }
}

先说下next数组的作用,next[i]的值就代表主串要移动的位数

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章