方法1:双层循环,复杂度较高
int ifzixulie(char *s, int m, char *t, int n)
{
int i, j,k,f;
k = 0;
f = 0;
for (i = 0; i < n; i++)
for (j = k; j<m; j++)
{
if (t[i] == s[j])
{
k = j + 1;
f++;
break;
}
}
if (f!=n)
return 0;
else
return 1;
}
方法2:单层循环
int ifzixulie(char *s, int m, char *t, int n)
{
int i=0, j=0;
while (i < n)
{
if (s[j] == t[i])
{
i++;
j++;
if (i != n&&j == m) //特殊情况:adh不是ahd的子序列
return 0;
}
else
{
j++;
if (j == m)
return 0;
}
}
return 1;
}
主函数:
main()
{
char s[50], t[50] ;
int m, n;
scanf("%s", s);
scanf("%s", t);
m = strlen(s);
n = strlen(t);
if (ifzixulie(s, m, t, n)==0)
printf("字符串t不是s的子序列");
else
printf("字符串t是s的子序列");
}