public class ViolenceMatch {
public static void main(String[] args) {
String str1 = "BBC ABCDAB ABCDABCDABDE";
String str2 = "ABCDABD";
int index = strMatch(str1, str2);
System.out.println("index = " + index);
}
/**
* 暴力法求解str2在str1中的匹配位置
*/
public static int strMatch(String str1, String str2) {
char[] s1 = str1.toCharArray();
char[] s2 = str2.toCharArray();
int s1Len = s1.length; //字符串str1的长度
int s2Len = s2.length; //字符串str2的长度
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个字符,i-j相当与回到了匹配上第一个字符时i的位置,再加一表示当前位置匹配失败从下一个位置重新开始匹配
j = 0;
}
}
if(j == s2Len) { //如果匹配成功,返回匹配成功的位置
return i - j;
} else {
return -1;
}
}
}
版权声明:本文为ytc958374686原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。