思路:先从头遍历寻找a字符串,再从尾部遍历寻找b字符串,然后求出中间字符串数量
时间复杂度:O(2n);
#include <iostream>
using namespace std;
int flaga,flagb;//用来判断a,b是否在s中存在
int main()
{
string s,a,b;
char c;
while(cin>>c,c!=',') s+=c;
while(cin>>c,c!=',') a+=c;
while(cin>>c) b+=c;
if(s.size()<a.size()||s.size()<b.size()) {puts("-1");return 0;}
//寻找a
int l,r,k=0;
for(int i=0;i<s.size();i++)
{
if(s[i]==a[k]) k++;
else k=0;
if(k==a.size()){l=i+1;flaga=1;break;}
}
//cout<<l<<endl;
//寻找b
int x=b.size()-1,z=0;
for(int i=s.size()-1;i>=0;i--)
{
if(s[i]==b[x]) x--,z++;
else x=b.size()-1,z=0;
if(z==b.size()) {r=i-1;flagb=1;break;}
}
//cout<<r<<endl;
if(l>=r||!flaga||!flagb) puts("-1");
else cout<<r-l+1<<endl;
return 0;
}