给定两个字符串序列A,B,求A序列不同位置构成的子序列中和B序列相同的有多少个。
例如A序列为a1b2c3d4c5(序列为abcc,12345是为区分位置而加入的数字),B序列abc
这A序列不同位置构成的子序列中和B相同的有a1b2c3,a1b2c5两个
3 a aa abcbc abc abcdefabcdefdefa a
0 3 3
AC码:
#include<stdio.h> #include<string.h> char ch1[100005],ch2[1005]; int f[1005]; int main() { int T,len1,len2,i,j; scanf("%d",&T); while(T--) { scanf("%s%s",ch1,ch2); len1=strlen(ch1); len2=strlen(ch2); memset(f,0,sizeof(f)); if(len1<=len2) { if(strcmp(ch1,ch2)==0) printf("1\n"); else printf("0\n"); } else { f[0]=1; for(i=0;ch1[i]!=‘\0‘;i++) { for(j=len2-1;j>=0;j--) { if(j<=i&&ch1[i]==ch2[j]) f[j+1]=(f[j]+f[j+1])%10003; } } printf("%d\n",f[len2]); } } return 0; }
原文:http://blog.csdn.net/u012804490/article/details/26134475