用代码实现人的DNA和病毒DNA均表示成由一些字母组成的字符串序列。然后检测某种病毒DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了该病毒,否则没有感染。例如,假设病毒的DNA序列为baa,患者1的DNA序列为aaabbba,则感染,患者2的DNA序列为babbba,则未感染。(注意,人的DNA序列是线性的,而病毒的DNA序列是环状的) 输入格式: 输入第一行中给出1个整数i(1≤i≤11),表示待检测的病毒DNA和患者DNA的对数。 输入i行串序列,每行由两个字符串组成(字符串中不含不可见字符),两字符串之间用一个空格分隔,分别代表病毒的DNA序列和患者的DNA序列,病毒的DNA序列和患者的DNA序列长度不超过500。 输出格式: 依次逐行输出每对检测样本的结果,感染输出:YES,未感染输出:NO。
时间: 2023-07-14 07:13:58 浏览: 151
字符串相关,实现输入字符串的检测
以下是Python3代码实现:
```python
def is_infected(virus_dna, patient_dna):
virus_len, patient_len = len(virus_dna), len(patient_dna)
# 扩展病毒DNA序列(变成环状)
virus_dna += virus_dna
for i in range(patient_len):
if patient_dna[i:i+virus_len] in virus_dna:
return "YES"
return "NO"
n = int(input())
for i in range(n):
virus_dna, patient_dna = input().split()
print(is_infected(virus_dna, patient_dna))
```
首先,我们定义一个函数 `is_infected`,输入参数为病毒DNA序列和患者DNA序列,输出为是否感染的结果。在函数中,我们先将病毒DNA序列扩展成环状(即将其复制一遍拼接在原序列后面),然后依次判断患者DNA序列中的每个长度为病毒DNA序列长度的子串是否在扩展后的病毒DNA序列中出现过。如果出现过,则说明此人感染了该病毒,否则没有感染。
在主程序中,我们先读入待检测的病毒DNA和患者DNA的对数,然后依次对每对检测样本调用 `is_infected` 函数,并输出其返回结果即可。
阅读全文