package org.kmp object Kmp { private var i = 0 private var j = 0 def apply(pattern: String, target: String): Int = { //max self matched char number val p = new Array[Int](pattern.length) //pre process p(0) = 0 for (i <- 1 until pattern.length) { while (j > 0 && pattern(j) != pattern(i)) j = p(j - 1) if (pattern(j) == pattern(i)) j = j + 1 p(i) = j } println(p.mkString) //match the pattern j = 0 for (i <- 0 until target.length) { while (j > 0 && pattern(j) != target(i)) j = p(j - 1) if (pattern(j) == target(i)) j = j + 1 if (j == pattern.length ) return i - j + 1 } return -1 } def main(args: Array[String]) = { println(Kmp("caab", "asdfacaab")) } } kmp算法 scala实现