判断一个字符串是否为另一个的子序列

方法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的子序列");
}

猜你喜欢

转载自blog.csdn.net/small_planet/article/details/108418391
今日推荐