1776 牛的基因组学(判断两个集合是否存在交集--哈希表)

1. 问题描述:

农夫约翰拥有 N 头有斑点的牛和 N 头没有斑点的牛。他刚刚完成了牛遗传学课程,他确信奶牛上的斑点是由牛基因组突变引起的。农夫约翰花了大价钱对他的奶牛的基因组进行了测序。每个基因组都是一个由四个字符 A,C,G,T 构成的长度为 M 的字符串。当他统计得到的奶牛的基因组序列时,可以得到一个如下所示的表:(此时,N=3)位置 :    1 2 3 4 5 6 7 ... M
斑点牛 1: A A T C C C A ... T
斑点牛 2: G A T T G C A ... A
斑点牛 3: G G T C G C A ... A

普通牛 1: A C T C C C A ... G
普通牛 2: A C T C G C A ... T
普通牛 3: A C T T C C A ... T
通过仔细观察该表,他发现通过位置 2 的字符足以判断奶牛是否存在斑点。也就是说,仅通过查看这个位置上的字符,农夫约翰就可以判断他的哪些奶牛有斑点,哪些没有斑点。(在这里,A 和 G 表示有斑点,C 表示无斑点,T 无关紧要,因为没有任何一头牛的第二个位置上的字符是 T)位置 1 上的字符不足以判断奶牛是否存在斑点,因为 A 既可以表示有斑点也可以表示无斑点。给定约翰的奶牛的基因组序列列表,请你计算可以单独用来判断奶牛是否存在斑点的位置的数量。

输入格式

第一行包含两个整数 N 和 M。接下来 N 行,每行包含一个长度为 M 的字符串,用来描述斑点牛的基因组序列。再接下来 N 行,每行包含一个长度为 M 的字符串,用来描述普通牛的基因组序列。

输出格式

输出可以单独用来判断奶牛是否存在斑点的位置的数量。

数据范围

1 ≤ N,M ≤ 100

输入样例:

3 8
AATCCCAT
GATTGCAA
GGTCGCAA
ACTCCCAG
ACTCGCAT
ACTTCCAT

输出样例:
1
来源:https://www.acwing.com/problem/content/description/1778/

2. 思路分析:

分析题目可以知道我们可以枚举每一个位置,当当前位置斑点牛和普通牛没有交集的时候说明当前位置可以判断出是哪一种牛,如何判断两个集合是否存在交集呢?其中一个比较常用的方法是使用一个哈希表来记录其中一个集合中的元素,当枚举另外一个集合元素的时候如果发现当前枚举的元素在哈希表中说明存在交集。

3. 代码如下:

class Solution:
    def process(self):
        n, m = map(int, input().split())
        # s1, s2分别用来描述斑点牛与普通牛的基因序列
        s1, s2 = list(), list()
        for i in range(n):
            s1.append(input())
        for i in range(n):
            s2.append(input())
        res = 0
        for i in range(m):
            mp = dict()
            for j in range(n):
                if s1[j][i] not in mp: mp[s1[j][i]] = 1
            flag = 1
            for j in range(n):
                # 两个集合存在交集
                if s2[j][i] in mp:
                    flag = 0
                    break
            if flag: res += 1
        return res


if __name__ == '__main__':
    print(Solution().process())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值