首页 > 代码库 > NYOJ 336 子序列
NYOJ 336 子序列
子序列
时间限制: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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。