三段式搞定KMP算法so eazy

文章介绍了一种新颖的解题方法,通过构建三段式表格来计算给定字符串中重复对称字母的个数,使得原本复杂的问题变得简单易懂。作者展示了如何逐步应用这个方法,最终得到next数组的函数值。
摘要由CSDN通过智能技术生成

让我们先看这样一道题:

光题目就让人头皮发麻,这道题的传统解法是这样的:

已经完全看不懂了吧quq,没事下面教大家用三段式轻松解决这类问题!

我们先列这样一个三段式表格:

Sabaac
PM
next-1
next
  1. pm:重复对称的字母个数;
  2. next-1:初值为-1的next数组;
  3. next:初值为0的next数组(要求的);

首先先创建一个空的字母队列

然后把a拿进来,重复对称的字母个数是0;

a

Sabaac
PM0
next-1
next

再把第二个字母b拿进来,这时候是ab,重复的字母个数还是为0个;

ab

Sabaac
PM00
next-1
next

这时候把第三个字母a拿进来,这时候是aba,两个a关于b对齐,重复对称的字母就是a;

aba

 那么此时重复的字母个数是1个;

Sabaac
PM001
next-1
next

把第四个字母a拿进来,这时候字母a关于ba对称,重复对称的字母个数为1;

abaa

Sabaac
PM0011
next-1
next

把第5个字母c拿进来,没有重复对称的字母了,个数为0;

abaac

Sabaac
PM00110
next-1
next

next-1里面的数就是PM的数往右边整体挪一位;空的位置填上-1,如下表:

Sabaac
PM00110
next-1-10011
next

next里面的数就是next-1里的数整体加一;

Sabaac
PM00110
next-1-10011
next01122

那么next的函数值就求出来了:就是01122,是不是非常的eazy。OVO
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gabriel Drop Out

饿饿!饭饭!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值