高级模式匹配
描述
给定两个字符串s和t,判断s是否是t的子序列,即从t中删除若干个(包括0个)字符,将剩余的字符连接起来,即可获得s。字符串s和t长度不超过1000。
输入
第一行,字符串t,文本长度\le≤1000。
第二行,字符串s,文本长度\le≤1000。
输出
若s是t的子序列,输出1,否则输出0。
```c
#include <stdio.h>
#include <string.h>
void f(char *s1,char *s2,int l1,int l2,int t,int t0,int m)
{
for(; *s1!='\0' && *s2!='\0'; s1++,t++)
{
if(l1-t<l2-t0)
{
m=0;
break;
}
if(*s1==*s2)
{
if(*(s2+1)!='\0')
{
f(s1++,s2++,l1,l2,t++,t0++,m);
}
break;
}
}
}
int main()
{
char a[1002],b[1002],*p1,*p2;
int len1,len2,q=0,h=1,q0=0;
void f(char *s1,char *s2,int l1,int l2,int t,int t0,int m);
fgets(a,1002,stdin);
fgets(b,1002,stdin);
len1= strlen(a) - 1;
if(a[len1]=='\n')a[len1]='\0';
len2=strlen(b)-1;
if(b[len2]=='\n')b[len2]='\0';
p1=a;
p2=b;
f(p1,p2,len1,len2,q,q0,h);
printf("%d",h);
return 0;
}
```