相似序列 (20 分)

简介: 相似序列 (20 分)

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");
            }
        }
}
}
相关文章
【C刷题】矩阵相等判断与序列中删除指定的数字(下)
【C刷题】矩阵相等判断与序列中删除指定的数字(下)
|
7月前
16.有一分数序列 1/2,2/3,3/5,5/8,8/13,13/21,…求出这个序列的前200 项之和
16.有一分数序列 1/2,2/3,3/5,5/8,8/13,13/21,…求出这个序列的前200 项之和
72 0
|
7月前
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
52 0
对任意给定的两个正整数,100<n<m<1000,计算这两个数之间所有素数和,包含m,n自身
|
7月前
PTA-求奇数分之一序列前N项和
求奇数分之一序列前N项和
95 0
|
C语言
【C刷题】矩阵相等判断与序列中删除指定的数字(上)
【C刷题】矩阵相等判断与序列中删除指定的数字(上)
m 序列(最长线性反馈移位寄存器序列)详解
m 序列(最长线性反馈移位寄存器序列)详解
561 0
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
|
Java 测试技术
Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3
Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3
216 0
Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3
|
Python
100道单选题,随机选,考够60分的概率有多高?
100道单选题,随机选,考够60分的概率有多高?
227 0
|
算法
[算法]将一个正整数拆分成若干个正整数的和,输出所有的结果不重复
推荐先看我的一篇介绍Set去重的博文地址是 http://blog.csdn.net/bug_moving 看了这个之后,再来看下面的程序基本就能看懂了 题目 我也不太记得,因为是朋友给我口述的,然后给了我一个截图,看了图片大致也能知道题目要我们做什么 package yn; import java.util.ArrayList; import java.
2813 0