首先介绍一下暴力匹配算法的思路
如果用暴力匹配的思路,并假设现在str1匹配到i的位置,字串str2匹配到j的位置,则有:
- 如果当前字符匹配成功(即str1[i] == str2[j]),则i++,j++,继续匹配下一个字符。
- 如果失配(即str1[i] != str2[j]),令i=i-(j-1),j = 0。相当于每次匹配失败时,i回溯,j被置为0.
- 用暴力方法解决问题的话会有大量的回溯,每次只移动一位,若是不匹配,移动到下一位接着判断,浪费了大量的时间。(不可行,接着下一篇会介绍KMP算法)
- 暴力匹配算法的实现
package Algorithm;
public class ViolenceMatch {
public static void main(String[] args) {
String str1="addgadfhfgsfgs";
String str2="fhf";
int index = violenceMatch(str1, str2);
System.out.println("index="+index);
}
//暴力匹配算法实现
public static int violenceMatch(String str1,String str2){
char[] s1 = str1.toCharArray();
char[] s2 = str2.toCharArray();
int s1len = s1.length;
int s2len = s2.length;
//两个索引
int i = 0;//指向字符串str1
int j = 0;//指向字符串str2
while (i<s1len && j<s2len) {//保证匹配不越界
if (s1[i] == s2[j]) {
i++;
j++;
}else {
i = i-(j-1);
j=0;
}
}
//判断是否匹配成功
if (j == s2len) {
return i-j;
}else {
return -1;
}
}
}
运行结果如图:
非常推荐尚硅谷讲解的java算法!