题目描述
对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。
给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。
测试样例:
"acbc",4,"bc",2
返回:2
class StringPattern {
public:
int findAppearance(string A, int lena, string B, int lenb) {
// write code here
if(lena<lenb) return -1;
int count=0;
for(int i=0;i<lena-lenb+1;i++)
if(A[i]==B[0]) {
if(A.substr(A[i],lenb)==B) {
return i;
break;
}
}
return -1;
}
};
段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
class StringPattern {
public:
int findAppearance(string A, int lena, string B, int lenb) {
// write code here
return A.find(B);
}
};
class StringPattern {
public:
int findAppearance(string A, int lena, string B, int lenb) {
// write code here
for(int i=0; i<=lena-lenb; i++) {
int j = 0;
for(; j<lenb; j++) {
if(A[i+j] != B[j])
break;
}
if(j == lenb)
return i;
}
return -1;
}
};