问题描述:
对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。
给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。
测试样例:
"acbc",4,"bc",2
返回:2
思路:1,该类型题目的一般思路是暴力求解,采用两层循环,我们会从A[0] 跟B[0] 匹配,如果相等则匹配下一个字符,直到出现不相等的情况,此时我们会简单的丢弃前面的匹配信息,然后从A[1] 跟 B[0]匹配,循环进行,直到主串结束,或者出现匹配的情况。这种简单的丢弃前面的匹配信息,造成了极大的浪费和低下的匹配效率。时间复杂度是o(nlogn)。
(暴力方法)AC代码如下:
class StringPattern {
public:
int findAppearance(string A, int lena, string B, int lenb) {
// write code here
int i,j,k;
for(i=0;i<lena;i++){
k=i;
for(j=0;j<lenb;j++,k++)
if(A[k]!=B[j])
break;
if(j==lenb)
return i;