已知某字符串,求Next數組值

舉例:數組

已知String str = "aaab"; 其Next數組值結果爲  0123。spa

已知String str = "babab"; 其Next數組值結果爲  01123。ci

解析:table

座標 1 2 3 4
模式串 a a a b
NEXT數值 0   1 2 3

 

座標 1 2 3 4 5
模式串 b a b a b
NEXT數值 0 1 1 2 3

NEXT數組的求解方法是:方法

        第一位的next值爲0,第二位的next值爲1,後面求解每一位的next值時,根據前一位進行比較。首先將前一位與其next值對應的內容進行比較,若是相等,則該位的next值就是前一位的next值加上1;若是不等,向前繼續尋找next值對應的內容來與前一位進行比較,直到找到某個位上內容的next值對應的內容與前一位相等爲止,則這個位對應的值加上1即爲需求的next值;若是找到第一位都沒有找到與前一位相等的內容,那麼需求的位上的next值即爲1。next

計算過程:(以第二題爲例)tab

    計算3b (3b表示座標爲3的b):先比較3b的前一位2a,2a的NEXT值爲1,將2a和座標爲1的串1b比較,不相等,由於1b是第一位,因此最終3b的NEXT值爲1。di

    計算4a:先比較4a的前一位3b,3b的NEXT值爲1,將3b和座標爲1的串1b比較,相等,因此最終4a的NEXT值爲(3b的NEXT值 + 1)= 2。ab

    計算5b:同理計算4a,可得計算結果爲2+1=3。

相關文章
相關標籤/搜索