数据结构[C语言] 超级简单并且极易理解的手算next数组方法

文章详细介绍了如何手动计算next数组,这是一种在字符串处理算法中常用的数据结构,用于找到字符串的前后缀重合部分。通过示例字符串abaabcac,逐步解释了每个位置的next值的计算方法,强调理解前后缀的概念和重合字符数的计算。
摘要由CSDN通过智能技术生成

首先,手算next数组是非常简单的,仔细看完下面的步骤,你必定会求解next数组。next数组的算法是第j位字符前面j-1位字符组成的字串前后缀重合字符数+1。前缀:包含首个字符而不包含末尾字符,后缀:包含末尾字符而不包含首位字符,

你不一定要理解透彻文字意义,耐心观看下面的步骤,即使你不理解文字,你也可以极快的求解next数组。

我们由下面这个简单的例子来演示一遍求解next数组。

给定一个字串T=“abaabcac",列出下边表格:

求子串T="abaabcac"的next数组
编号12345678
   Tabaabcac
next
  1. 由定义可知next数组第一位一定是0,第2位一定是1。
    求子串T="abaabcac"的next数组
    编号12345678
       Tabaabcac
    next01
  2. 此时求解next[3],其实就是求第3位字符前2位字符组成的字串前后缀重合字符数+1,此时ab为前两位字符,前缀为a,后缀为b,重合数为0,则next[3]=0+1=1
    求子串T="abaabcac"的next数组
    编号12345678
       Tabaabcac
    next011

     3.next[4]的算法,求第4位字符前3位字符组成的字串前后缀重合字符数+1,此时aba为前3位字符,

aba中,前缀分别为a,ab

                 后缀分别为a,ba,此时重合字符为1,则next[4]=1+1=2

求子串T="abaabcac"的next数组
编号12345678
   Tabaabcac
next0112

    4.next[5]的算法,求第5位字符前4位字符组成的字串前后缀重合字符数+1,此时abaa为前4位字符,

                                前缀分别为a,ab,aba,

                                后缀分别为a,aa,baa,重合字符为1,则next[5]=1+1=2

求子串T="abaabcac"的next数组
编号12345678
   Tabaabcac
next01122

    5.next[6]的算法,求第6位字符前5位字符组成的字串前后缀重合字符数+1,abaab为前5位字符,

                                前缀分别为a,ab,aba,abaa,

                                后缀分别为b,ab,aab,baab,重合字符为2,则next[6]=2+1=3

求子串T="abaabcac"的next数组
编号12345678
   Tabaabcac
next011223

  6.next[7]算法,求第7位字符前6位字符组成的字串前后缀重合字符数+1,abaabc为前6位字符,

                           前缀分别为a,ab,aba,abaa,abaab

                           后缀分别为c,bc,abc, aabc,baabc,重合字符为0,则next[7]=0+1=1

求子串T="abaabcac"的next数组
编号12345678
   Tabaabcac
next0112231

   7.next[8]算法,求第8位字符前7位字符组成的字串前后缀重合字符数+1,abaabca为前7位字符,

                           前缀分别为a,ab,aba,abaa,abaab,abaabc

                           后缀分别为a,ca,bca,abca,aabca, baabca,重合字符为1,则next[8]=1+1=2

求子串T="abaabcac"的next数组
编号12345678
   Tabaabcac
next01122312

以上便是手算next数组方法,如有不足之处,请指出,下篇文章将通过代码实现next数组求解以及优化后的nextval求解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pointer->指针

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值