测试主方法
public static void main(String[] args){
String pat="fg";
String txt="faauedfasffsjjafkjfsdfdffsafsdfsafdsssssssssssafasdfsdadfsafegrgsdfasaaffgfai";
System.out.println(search(pat,txt));
}
暴力法
public static int searchOne(String pat,String txt){
int m=pat.length();
int n=txt.length();
for(int i=0;i<=n-m;i++){
//母字符串指针循环0到n-m
int j;
for(j=0;j<m;j++){
//子字符串循环0到m-1
if(txt.charAt(i+j)!=pat.charAt(j)){
//只要有一个字符不同,跳出循环,从母字符串的下一个字符重新开始
break;
}
}
if(j==m){
//说明子字符串所有字符都匹配
return i;
}
}
return n;
}
/** * * @param pat * @param txt * @return the matching location */
public static int searchTwo(String pat,String txt){
int i,m=pat.length();
int j,n=txt.length();
for(i=0,j=0;i<n && j<m;i++){
//i递增
if(txt.charAt(i)==pat.charAt(j)){
//匹配 j才增加
j++;
}
//不匹配
else{
//i回退后 for循环再+1
i-=j;
j=0;
}
}
if(j==m){
//暴力法一 i不会回退
return i-m;
}
else{
return n;
}
}