字元串處理是每個程式設計者都必須掌握的知識,主要看看字元串的搜尋查找功能。
現在的程式設計語言如C/C++/Java等都提供了對字元串子串的查找功能,具體如下:
(1)C:strchr,strstr。
(2)C++:find,rfind,find_first_of,find_first_not_of等等。
(3)Java:indexOf,lastIndexOf等。
下面說明一種使用遞歸哈希進行字元串搜尋/查找的方法:
(1)遞歸哈希
維護一個視窗,大小為n。如下公式即為起始位置為x,長度為n的視窗的哈希數值。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuMmY2QDM3Q2YzMzNlZ2MidjZ4cTNzIWMmZGN1ATO1QmNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
遞歸哈希主要展現在哈希數值的更新操作,減少重複的計算。下面是遞歸哈希的更新公式。
因為視窗[x,x+n)與[x+1,x+n+1)有n個相同的字元,在上的更新公式中我們可以看到,更新就是把“頭元素”的哈希數值去掉,在加上一個新增的視窗元素。
(2)使用遞歸哈希進行字元串比對
設模式串為pattern,文本為text,設定視窗大小Plen與模式串的長度相同。每次保持文本中Plen長度字元串的哈希值,當哈希值與模式串的哈希值相等時,進行字元串的具體校驗。如果校驗相等,報告結果。
View Code
執行輸出: