next和nextValue的一些小知識

2021-10-23 14:59:56 字數 1584 閱讀 1399

模式串t=「a b a a b c a c」,對應的next函式值為 ,nextval函式值為 。
next值的比較規則是:(1)第一位的next值為0,第二位的next值為1

(2)後面求解每一位的next值時,根據前一位與其next值對應的內容進行比較。

根據例項a b a a b c a c我們來進行解析序號1

2345

678序列

abaa

bcac

next01

1223

12解析預設

預設上一位,上一位為b,b的next值為1,找序號為1對應的序列為a,相等,那麼序號為1的next值+1為1

上一位為a,next值為1,序號為1的序列為a,相等,即為前一位的next值+1為2

上一位為a,next為2,序號2的序列為b,不等,繼續尋找,序號1的序列為a,相等,前一位的next+1為2

上一位為b,b的next為2,序號2的序列為b,相等,前一位的next+1為3

上一位為c,next值為3,3對應的為a,不等,再繼續尋找,知道找到第一位也沒有相同的,那麼值為1

上一位為a,不等,找序號為1的為a,相同,next值為前一位+1為2

規則:根據next值來給出結論

nextvalue值的比較規則是:

(1)第一位的nextvalue值為0

(2)第二位如果和第一位相同就為0,不同為1

(2)後面求解每一位的nextvalue值時,根據其next值對應的內容進行比較。

第一層就找到不同,其nextvalue和它的value相等

第一層找到相同,沒用,要繼續往下找,直到找到不同為止,那麼所在的 不同的next值就是我們需要的nextvalue值

如果一直找都是相同的值,那麼其值為0

根據例項a b a a b c a c我們來進行解析:

|next| 0 | 1 | 1 | 2 | 2 | 3 | 1 | 2 |

第一位的nextval值必定為0,第二位如果於第一位相同則為0,如果不同則為1。

第三位的next值為1,那麼將第三位和第一位進行比較,均為a,相同,則,第三位的nextval值為0

第四位的next值為2,那麼將第四位和第二位進行比較,不同,則第四位的nextval值為其next值,為2。

第五位的next值為2,那麼將第五位和第二位進行比較,相同,第二位的next值為1,則繼續將第二位與第一位進行比較,不同,則第五位的nextval值為第二位的next值,為1。

第六位的next值為3,那麼將第六位和第三位進行比較,不同,則第六位的nextval值為其next值,為3。

第七位的next值為1,那麼將第七位和第一位進行比較,相同,則第七位的nextval值為0。

第八位的next值為2,那麼將第八位和第二位進行比較,不同,則第八位的nextval值為其next值,為2。

小案例

快去試驗一下吧

kmp程式計算next和改進的next

include include includeusing namespace std int next 100 1 val 1 此時意味著主串和子串的下標都需要加1 2 val 中的任意值,k為正在比較的第k個字元,也就是說當他們不相等時,需要回溯到val繼續比較 void get next cha...

next 和nextLine 的區別

next 一定要讀取到有效字元後才可以結束輸入,對輸入有效字元之前遇到的空格鍵 tab鍵或enter鍵等結束符,next 方法會自動將其去掉,只有在輸入有效字元之後,next 方法才將其後輸入的空格鍵 tab鍵或enter鍵等視為分隔符或結束符。簡單地說,next 查詢並返回來自此掃瞄器的 下乙個完...

next和nextval的求法

有的時候再學kmp演算法的時候我們第一步就被next和nextval嚇壞了,今天我來講一下我求next和nextval的方法和技巧,如有錯誤也希望大家及時指正。01 2345 6789 10字串ab aacd aaaa bnext 10 0110 0111 1nextval 10 1110 1111...