字符串匹配KMP算法
概述
问题:
在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下来称为T)中出现,就返回它的具体位置,否则返回-1(常用手段)。
Brute-Force
要在T中找到P,暴力法的做法是从左到右一个个匹配,在T中用 i 标记,P中用 j 标记,依次比较 i+1 , j+1、i+2 , j+2 ……
当 i+3 , j+3 不同时,暴力法将 i 退回 i+1 ,重置 j ,直到完全相等。
/**
* 暴力破解法
* @param ts 主串
* @param ps 模式串
* @return 如果找到,返回在主串中第一个字符出现的下标,否则为-1
*/
int bf(String ts, String ps) {
char[] t = ts.toCharArray();
char[] p = ps.toCharArray();
int i = 0; // 主串的位置
int j = 0; // 模式串的位置
while (i < t.length && j < p.length