DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368) rust解法

输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总Hamming距离尽量小。两个等长字符串的Hamming距离等于字符不同的位置个数,例如,ACGT和GCGA的Hamming距离为2(左数第1, 4个字符不同)。

输入整数m和n(4≤m≤50,4≤n≤1000),以及m个长度为n的DNA序列(只包含字母A,C,G,T),输出到m个序列的Hamming距离和最小的DNA序列和对应的距离。如有多解,要求为字典序最小的解。例如,对于下面5个DNA序列,最优解为TAAGATAC。

TATGATAC

TAAGCTAC

AAAGATCC

TGAGATAC

TAAGATGT

解法

rust 复制代码
use std::{collections::HashMap, io};

fn main() {
    let mut grid: Vec<Vec<char>> = vec![];
    let mut buf = String::new();
    io::stdin().read_line(&mut buf).unwrap();
    let mut iter = buf.split_whitespace();
    let m: usize = iter.next().unwrap().parse().unwrap();
    let n: usize = iter.next().unwrap().parse().unwrap();

    for _i in 0..m {
        let mut buf = String::new();
        io::stdin().read_line(&mut buf).unwrap();
        let cs = buf.trim().chars().collect();
        grid.push(cs);
    }
    /*for s in &grid {
        let s: String = s.iter().collect();
        println!("{:?}", s);
    }*/
    let mut ans = String::new();
    for i in 0..n {
        let mut kv = HashMap::new();
        for j in 0..m {
            kv.entry(grid[j][i])
                .and_modify(|num| *num += 1)
                .or_insert(1);
        }
        let mut mc = (' ', 0);
        let mut cs: Vec<_> = kv.keys().collect();
        cs.sort();

        for k in cs {
            if kv.get(k).unwrap() > &mc.1 {
                mc = (*k, *kv.get(k).unwrap());
            }
        }
        ans.push(mc.0);
    }
    println!("{}", ans);
}
相关推荐
考虑考虑5 小时前
nginx路由重写
运维·后端·自动化运维
阿里嘎多学长5 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
布吉岛的石头5 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
JaguarJack6 小时前
PHP 紧急修复两项严重 RCE 漏洞,8.2 至 8.5 用户应立即升级
后端·php·服务端
小羊没烦恼!6 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
BingoGo6 小时前
PHP 紧急修复两项严重 RCE 漏洞,8.2 至 8.5 用户应立即升级
后端·php
金銀銅鐵6 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨6 小时前
spring auth 核心流程详解
java·后端·spring
quantdash_cc6 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
昂好的day7 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#