字符串查找暴力算法
文本串:ABADEFG 模式串: ADEF
(1)两个for循环实现
public static int search(String pat, String txt){
int M = pat.length;
int N = txt.length;
for(int i = 0; i <= N-M; i++){
int j;
for(j = 0; j < M; j++){
if(txt.charAt(i+j) != pat.charAt(j)){
break;
}
if(j == M) return i; //找到匹配
}
}
return N;
}
(2)显示回退实现
相对(1)用两个for循环,我们进行一些改进,来对这两个for循环实现进行一些优化
public static int search(String pat, String txt){
int M = pat.length;
int N = txt.length;
for(i = 0; j = 0; i < N && j < M; i++){
if(txt.charAt(i) == pat.charAt(j)){
//如果匹配,则将j++,本次循环结束,i++,继续下次循环,也就是对比新位置的两个字符
j++;
} else {
/**
如果不匹配了,就要回退,首先i回退到 i-j,比如首次回退,i-j=0,j=0,本次循环结束,i++得出下次循环 i=1,j=0,就算这样利用这种
错位比较,有效避免的内部循环实现
*/
i -= j;
j = 0;
}
}
if(j == M) return i - M; //找到匹配
else return N; //未找到匹配
}