题目描述
对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。
给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。
测试样例:
"acbc",4,"bc",2
返回:2
第一种解法:直接调用String中 查找函数
import java.util.*;
public class StringPattern {
public int findAppearance(String A, int lena, String B, int lenb) {
int res = -1;
res = A.indexOf(B);
return res;
}
}
不过不推荐这种写法,题目本意考察字符匹配模式算法,于是我们看第二种写法。
第二种解法:字符匹配
import java.util.*;
public class StringPattern {
public int findAppearance(String A, int lena, String B, int lenb) {
if (lena < lenb) {
return -1;
}
if (lena == lenb) {
if (A.equals(B)) {
return 0;
} else {
return -1;
}
}
int i = 0;
while(i + lenb <= lena) {
if (A.charAt(i) == B.charAt(0)) {
String help = A.substring(i, i + lenb);
if(help.equals(B)) {
return i;
}
}
i++;
}
return i == lena - lenb + 1 ? -1 : i;
}
}
可以用KMP,但实现难度递增很多。没必要