描述
有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10。想检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即,S1的右边界点在S2的左边界点的左侧)。计算满足上述条件的最大跨距(即,最大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目)。如果没有满足条件的S1,S2存在,则输出-1。
例如,S = "abcd123ab888efghij45ef67kl", S1="ab", S2="ef",其中,S1在S中出现了2次,S2也在S中出现了2次,最大跨距为:18。
输入
三个串:S, S1, S2,其间以逗号间隔(注意,S, S1, S2中均不含逗号和空格);
输出
S1和S2在S最大跨距;若在S中没有满足条件的S1和S2,则输出-1。
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][400];
char s[500];
char ch;
int c=0;
int l=0;
gets(s);
for(int i=0;i<strlen(s);i++)
{
if(s[i]!=',')
{
str[c][l]=s[i];
l++;
}
else
{
str[c][l]='\0';
c++;
l=0;
}
}
str[c][l]='\0';
int l1=0,l2=0,flag=0,pos1,pos2;
for(int i=0;i<strlen(str[0]);i++)
{
if(str[0][i]==str[1][l1])
{
l1++;
}
else
{
l1=0;
}
if(l1==strlen(str[1]))
{
flag=1;
l2=strlen(str[2])-1;
pos1=i;
break;
}
if(str[0][i]==str[2][l2])
{
l2++;
}
else
{
l2=0;
}
if(l2==strlen(str[2]))
{
flag=2;
l1=strlen(str[1])-1;
pos2=i;
break;
}
}
int flagg=0;
if(flag==0)
{
printf("-1");
}
else
{
if(flag==1)
{
for(int i=strlen(str[0])-1;i>=0;i--)
{
if(str[0][i]==str[2][l2])
{
l2--;
}
else
{
l2=strlen(str[2])-1;
}
if(l2==-1)
{
pos2=i;
flagg=1;
break;
}
}
if(flagg)
printf("%d",pos2-pos1-1);
else
printf("-1");
}
if(flag==2)
{
for(int i=strlen(str[0])-1;i>=0;i--)
{
if(str[0][i]==str[1][l1])
{
l1--;
}
else
{
l1=strlen(str[1])-1;
}
if(l1==-1)
{
pos1=i;
break;
}
}
if(flagg)
printf("%d",pos1-pos2-1);
else
printf("-1");
}
}
}