百练练习——1007:DNA排序

百练练习_day2

1007:DNA排序
描述
现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。
逆序对指的是字符串A中的两个字符A[i]、A[j],具有i < j 且 A[i] > A[j] 的性质。如字符串”ATCG“中,T和C是一个逆序对,T和G是另一个逆序对,这个字符串的逆序对数为2。

输入
第1行:两个整数n和m,n(0<n<=50)表示字符串长度,m(0<m<=100)表示字符串数量
第2至m+1行:每行是一个长度为n的字符串
输出
按逆序对数从少到多输出字符串,逆序对数一样多的字符串按照输入的顺序输出。
样例输入

10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

样例输出

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

代码:

a , b = input().split()
l=[]
m=[]
y=0
for x in range (0,int(b)):
    temp = input()
    for i in range (0,int(a)):
        for j in range(i,int(a)):
            if (ord(temp[i])>ord(temp[j])):
                y+=1
    l.append(y)
    m.append(temp)
    y=0
n=len(l)

for i in range (0,n):
    for j in range(0,n-i-1):
        if l[j]>l[j+1]:
            (l[j],l[j+1])=(l[j+1],l[j])
            (m[j], m[j+1]) = (m[j + 1], m[j])
for i in range (0,n):
    print(m[i])


先计算每一个字符串的逆序对的数量,然后排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值