next數組介紹

轉載自next數組介紹

================================================================================================================================

首先看看next數組值的求解方法例如:
模式串 a b a a b c a c
next值 0 1 1 2 2 3 1 2
      
       next數組的求解方法是:第一位的next值爲0,第二位的next值爲1,後面求解每一位的next值時,根據前一位進行比較。首先將前一位與其next值對應的內容進行比較,如果相等,則該位的next值就是前一位的next值加上1;如果不等,向前繼續尋找next值對應的內容來與前一位進行比較,直到找到某個位上內容的next值對應的內容與前一位相等爲止,則這個位對應的值加上1即爲需求的next值;如果找到第一位都沒有找到與前一位相等的內容,那麼需求的位上的next值即爲1。
       看起來很令人費解,利用上面的例子具體運算一遍。
       1.前兩位必定爲0和1。
       2.計算第三位的時候,看第二位b的next值,爲1,則把b和1對應的a進行比較,不同,則第三位a的next的值爲1,因爲一直比到最前一位,都沒有發生比較相同的現象。
       3.計算第四位的時候,看第三位a的next值,爲1,則把a和1對應的a進行比較,相同,則第四位a的next的值爲第三位a的next值加上1。爲2。因爲是在第三位實現了其next值對應的值與第三位的值相同。
       4.計算第五位的時候,看第四位a的next值,爲2,則把a和2對應的b進行比較,不同,則再將b對應的next值1對應的a與第四位的a進行比較,相同,則第五位的next值爲第二位b的next值加上1,爲2。因爲是在第二位實現了其next值對應的值與第四位的值相同。
       5.計算第六位的時候,看第五位b的next值,爲2,則把b和2對應的b進行比較,相同,則第六位c的next值爲第五位b的next值加上1,爲3,因爲是在第五位實現了其next值對應的值與第五位相同。
       6.計算第七位的時候,看第六位c的next值,爲3,則把c和3對應的a進行比較,不同,則再把第3位a的next值1對應的a與第六位c比較,仍然不同,則第七位的next值爲1。
       7.計算第八位的時候,看第七位a的next值,爲1,則把a和1對應的a進行比較,相同,則第八位c的next值爲第七位a的next值加上1,爲2,因爲是在第七位和實現了其next值對應的值與第七位相同。



發佈了9 篇原創文章 · 獲贊 70 · 訪問量 79萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章