C语言求不同的子序列

C语言求不同的子序列

C语言求不同的子序列_第1张图片
代码如下:

#include 
#include 
int c[10];		// 存入母串里与子串先等的字符 
int flag=0;		// C数组的下标 
void fun(char a[],char b[])
{
	int i;
	for (i=0;i<strlen(a);i++)
	{
		if(a[i]==b[flag])	// 如果a[i]=子串的第一个字符 
		{
			c[flag]=i;
			flag++;
		}
		if(flag==strlen(b))		// flag等于子串的长度则说明已找到一种 
		{
			for (int i=0;i<strlen(b);i++)
				printf("%2d",c[i]);
			printf("\n");
		}
		if(flag==strlen(b))		  
			flag--;			/***** 回溯  ****/
			
		if(i==strlen(a)-1)	// 如果循环到母串的最后一个字符了,说明子串最后一个字符已全部找到,再继续找子串倒数第二个字符 
		{
			flag--;
			i=c[flag];
		}	
	}
}
int main()
{	
	/***********     题目:判断子串在母串出现的总次数    ************/ 
	/*********  思路:遍历母串,用一个数组接收母串在子串存在的字符的下标,
				例如 abacbc下标为(0,1,2,3,4,5) 子串为 abc ,先找到a在找到b在找到c,然后输出在继续往后找C,重复此过程 
				*********/
	char a[10]="rabbbit",b[10]="rabit" ;		//a为母字符串,b为子字符串  
	fun(a,b);
}

运行结果C语言求不同的子序列_第2张图片

你可能感兴趣的