子序列
时间限制:2000 ms | 内存限制:65535 KB
难度:4
- 描述
-
给定两个字符串序列A,B,求A序列不同位置构成的子序列中和B序列相同的有多少个。例如A序列为a1b2c3d4c5(序列为abcc,12345是为区分位置而加入的数字),B序列abc
这A序列不同位置构成的子序列中和B相同的有a1b2c3,a1b2c5两个
- 输入
- 第一行一个数N(N不大于5)表示有N组测试数据
以下每组测试数据有两行 分别是字符串A和B,其中A串的长度不大于100000,B串的长度不多于1000,并且B长度多于100的只有一组数据
- 输出
- 对应每组数据输出一个整数,由于数字可能会很大,请对10003取余后再输出
- 样例输入
-
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; }
NYOJ 336 子序列
时间: 2024-11-07 07:18:33