相似序列 (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刷题】矩阵相等判断与序列中删除指定的数字(下)
|
6月前
PTA-求奇数分之一序列前N项和
求奇数分之一序列前N项和
85 0
|
C语言
【C刷题】矩阵相等判断与序列中删除指定的数字(上)
【C刷题】矩阵相等判断与序列中删除指定的数字(上)
|
C语言
C语言:输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
描述 输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。 输入描述: 输入包含三行, 第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。 第二行包含n个整数,用空格分隔。 第三行包含m个整数,用空格分隔。
263 0
C语言:输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
|
算法 索引
算法训练Day36|435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
算法训练Day36|435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
m 序列(最长线性反馈移位寄存器序列)详解
m 序列(最长线性反馈移位寄存器序列)详解
497 0
|
人工智能 算法 JavaScript
最长连续不重复的序列
最长连续不重复的序列
7-10 找最小的字符串 (15 分)
7-10 找最小的字符串 (15 分)
312 0
7-59 翻转单词顺序 (20 分)
7-59 翻转单词顺序 (20 分)
75 0
|
测试技术
7-177 输出全排列 (20 分)
7-177 输出全排列 (20 分)
97 0