DNA的相似性比对,常用于使用少量人体组织(如毛发等)鉴定人物身份等。本题你需要实现判断两个DNA序列是否相似。
为了简单起见。对于给定的字符串A和B,如果字符串A通过1次变换能得到B,那么称A与B相似。
1次变换可选择以下3种变换之一:
a.在A中任意位置添加(ATCG)任一字符;
b.在A中任意位置删除一个字符;
c.将A中任意位置字符替换为其他字符。
输入格式:
第一行一个整数T,表示共T<20组测试样例。 随后每两行以换行符结尾的字符串A、B为一个测试样例,且A、B均由(ATCG)四种字符组成。(1<=|A|、|B|<=100000)。
输出格式:
对于每个测试样例,如果相似输出"YE5",否则输出"N0"。
输入样例:
在这里给出一组输入。例如:
4 ATCG ATG ATCG ATGG ATCG ATTCG ATCG ACTG
输出样例:
在这里给出相应的输出。例如:
YE5 YE5 YE5 N0
#include<stdio.h> #include<string.h> int main(){ int T; scanf("%d",&T); int i,j; for(i=0;i<T;i++){ char s1[100000],s2[100000]; scanf("%s",s1); scanf("%s",s2); int x1=strlen(s1); int x2=strlen(s2); if(x1==x2){ int w=0; for(j=0;j<x2;j++){ if(s1[j]==s2[j]){ w++; } } if(w==x1-1){ printf("YE5\n"); } else{ printf("N0\n"); } } else if(x1==x2-1){ int w=0; int flag=0; for(j=0;j<x1;j++){ int k=j; if(flag){ k=j+1; } if(s1[j]==s2[k]){ w++; } if(s1[j]!=s2[k]&&flag==0){ flag=1; j--; } } if(w==x1){ printf("YE5\n"); } else{ printf("N0\n"); } } else if(x2==x1-1){ int w=0; int flag=0; for(j=0;j<x2;j++){ int k=j; if(flag){ k=j+1; } if(s2[j]==s1[k]){ w++; } if(s2[j]!=s1[k]&&flag==0){ flag=1; j--; } } if(w==x2){ printf("YE5\n"); } else{ printf("N0\n"); } } } }