.

我們平時在使用 java 程式設計中,判斷一個字串是否包含另一個字串可以使用 String 自帶的方法或者正則表示式,但是indexOf可以返回早哪一個索引位置。

如果不用indexOf這個方法,入參是兩個字串,返回值是如果包含則返回開始包含的索引值,否則返回-1。

比較樸素的想法就是BF演算法,一遍遍比較過來不就行了嘛,如果遇到比如按照如下的思路

寫的程式碼可以如下:

有了BF演算法,但是大神覺得效率不是很高,因為之前已經做了一些比較,可以利用之前比較過的資訊,所以有了KMP演算法。這個演算法是由高德納和沃恩·普拉特在1974年構思,同年詹姆斯·H·莫里斯也獨立地設計出該演算法,最終由三人於1977年聯合發表,大神的演算法還是有點不好理解的

相對於BF演算法,其中用了next方法,因為移動的次數只和模式串有關,和目標串無關,不過還要好好想想為什麼是這麼做的。

我這裡只是拋磚引玉,因為我也是看下面的參考大神的部落格:

http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

https://blog.csdn.net/v_july_v/article/details/7041827

https://www.zhihu.com/question/21923021

附:

我想BF演算法,是不是可以這麼實現,大家覺得有什麼問題?

相關文章