public class bl {
public static void main(String[] args) {
// TODO Auto-generated method stub
//在a串中找b串首次在a串中出现的位置。 暴力解法。
String s1 = "ssg usgnus usgnusgnusnh";
String s2 = "usgnusn";
int index = f(s1,s2);
System.out.println(index);
}
public static int f(String s1,String s2) {
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
int n = c1.length;
int m = c2.length;
int i = 0;//指向s1
int j = 0;//指向s2
while(i<n&& j<m) {
//如果匹配成功,i++,j++;
if(c1[i] == c2[j]) {
i++;
j++;
}else {
//匹配失败,j返回起始位置,i返回匹配到起始位置的下一位。
i = i-(j-1);
j = 0;
}
}
//判断是否匹配成功
if(j == m) {
System.out.println("j"+j+" i"+i);
return i-j;
}else {
return -1;
}
}
}
思路:假设现在s1匹配到i的位置,s2匹配到j位置则
1:若当前字符串匹配成功,则i++ j++,继续匹配下个字符
2:若匹配失败,则i = i-j+1,j=0。相当于每次匹配失败时i回溯,j置为0