最近看《算法》这本书,看到一种简单直接的子字符串查找算法,暴力子字符串查找。
代码:
public class SubString {
/**
* 暴力子字符串查找
*
* @param target
* @param txt
* @return
*/
public int findFirstIndex(String target, String txt) {
int m = target.length();
int n = txt.length();
for (int i = 0; i <= n - m; i++) {
int temp = 0;
for (temp = 0; temp < m; temp++) {
//将target中的字符与txt中的字符相对比,一旦不同,则跳出循环
if (target.charAt(temp) != txt.charAt(i + temp)) {
break;
}
}
if (temp == m) {
return i;
}
}
return -1;
}
}
public class SubString {
/**
* 暴力子字符串查找(显式回退)
*
* @param target
* @param txt
* @return
*/
public int findFirstIndex(String target, String txt) {
int j, m = target.length();
int i, n = txt.length();
for (i = 0, j = 0; i < n && j < m; i++) {
if (target.charAt(j) == txt.charAt(i)) {
j++;
} else {
//未找到,将指针复位
i -= j;
j = 0;
}
if (j == m) {
return j - m;
}
}
return -1;
}
}