咱們平時在使用 java 編程中,判斷一個字符串是否包含另外一個字符串可使用 String 自帶的方法或者正則表達式,可是indexOf能夠返回早哪個索引位置。html
若是不用indexOf這個方法,入參是兩個字符串,返回值是若是包含則返回開始包含的索引值,不然返回-1。java
比較樸素的想法就是BF算法,一遍遍比較過來不就好了嘛,若是遇到好比按照以下的思路正則表達式
寫的代碼能夠以下:算法
有了BF算法,可是大神以爲效率不是很高,由於以前已經作了一些比較,能夠利用以前比較過的信息,因此有了KMP算法。這個算法是由高德納和沃恩·普拉特在1974年構思,同年詹姆斯·H·莫里斯也獨立地設計出該算法,最終由三人於1977年聯合發表,大神的算法仍是有點很差理解的編程
相對於BF算法,其中用了next方法,由於移動的次數只和模式串有關,和目標串無關,不過還要好好想一想爲何是這麼作的。.net
我這裏只是拋磚引玉,由於我也是看下面的參考大神的博客:設計
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.htmlhtm
http://www.javashuo.com/article/p-ncuqifhj-eo.htmlblog
https://www.zhihu.com/question/21923021索引
附:
我想BF算法,是否是能夠這麼實現,你們以爲有什麼問題?