第一步:找
很明显,我们需要找到两个字符串在长字符串中的索引;
题目要求两字符串的最大跨距
也就是说,要第一个字符串从前往后找
第二个字符串从后往前找;
本题犯下的错误有:作用域;
很多时候并没有考虑到变量的作用域而报错
if(a.size()>str.size()||b.size()>str.size())
{
puts("-1");
return 0;
}
这段代码先把子字符串长度大于母字符串的情况排除掉
int i=0;
while(i+a.size()<=str.size())//保证不越界
{
int k=0;//子串索引指针
for(;k<a.size();k++)
{//一个个进行比较是否相似
if(str[i+k]!=a[k])
//母串不等于子串时跳出,此时记录的k为两者相同个数
break;
}
if(k==a.size())//如果k和子串数量相等
break;//那就是找到了
i++;//否则进入新一轮循环
}
int r=str.size()-b.size();
//原理相似,但是需要注意,b子串从后往前找
//这里举例子
//12345,b为45,5-2=3,所以是从4开始找
while(r+b.size()<=str.size())
{
int j=0;
for(;j<b.size();j++)
{
if(str[j+r]!=b[j])
break;
}
if(j==b.size())
break;
r--;
}
第二步,减
i+=a.size()-1;//因为索引从0开始
if(i>=r)
puts("-1");
else
cout<<r-i-1<<endl;
这样就做完了
本题难点在于考虑越界问题,时间,找的索引
需要多加练习