题目描述
有三个字符串 S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10
现在,我们想要检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即,S1的右边界点在 S2的左边界点的左侧)。
计算满足上述条件的最大跨距(即,最大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目)。
如果没有满足条件的S1,S2存在,则输出−1。
感受
1.使用string读取一行,然后使用if判断将一些分隔符剔除
2.使用find函数,变量声明为size_t类型,返回第一次出现的索引
3.find函数第二个参数,是从哪里开始查默认是0
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s,s1,s2;
cin>>s;
size_t i0=s.find(',');
size_t i1=s.find(',',i0+1);
s1=s.substr(i0+1,i1-i0-1);
s2=s.substr(i1+1);
bool st=true;
int a=-1,b=-1;
int stt=0;
for(int i=0;s[i]!=',';i++){
if(s.substr(i,s1.size())==s1&&st==true){
a=i+s1.size();
st=false;
stt=a;
}
}
if(!stt){
cout<<"-1";
return 0;
}
for(int i=stt;s[i]!=',';i++){
if(s.substr(i,s2.size())==s2)b=i;
}
int dis=-1;
if(b!=-1)dis=b-a;
cout<<dis;
return 0;
}