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

这篇具有很好参考价值的文章主要介绍了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

解法文章来源地址https://www.toymoban.com/news/detail-724410.html

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);
}

到了这里,关于DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368) rust解法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode】187. 重复的DNA序列

    难度:中等 DNA序列 由一系列核苷酸组成,缩写为 \\\'A\\\' , \\\'C\\\' , \\\'G\\\' 和 \\\'T\\\' .。 例如, \\\"ACGAATTCCG\\\" 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意

    2024年02月05日
    浏览(30)
  • 每日一题 187. 重复的DNA序列(中等)

    由于今天做了周赛,每日一题就简单点直接暴力哈希

    2024年02月05日
    浏览(28)
  • 力扣_字符串10—重复的DNA序列

    DNA序列 由一系列核苷酸组成,缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。 例如,“ACGAATTCCG” 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中 出现不止一次 的 长度为 10 的序列(子字符串)。你可以按 任

    2024年02月19日
    浏览(31)
  • 子序列(All in All, UVa 10340)rust解法

    输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。 解法

    2024年02月07日
    浏览(39)
  • STL-string(ACM)

    1.相当于加了一些操作的vectorchar 基本操作 字符串转换(C++11) 后面加入 字符串替换 把string类型转换成C的字符串类型 找字符串(时间复杂度 O(s长度 * t 的长度))(O (n * n)) 截取一段字符串字串  反转部分字符串(慢)  

    2024年02月09日
    浏览(36)
  • [ACM 学习] 最长上升子序列

    LIS(最长上升子序列)的三种经典求法 - 一只不咕鸟 - 博客园 (cnblogs.com) 理解一下第三种方法(贪心+二分查找) 因为构建的是上升子序列,所以是可以用二分查找找到最大的小于当前 A[i] 的在子序列中的 F[j],并更新 F[j+1] 注:刚开始看的时候还在疑惑只换一个的话,后面的

    2024年01月16日
    浏览(38)
  • Java基础09 —— 字符序列--String、StringBuilder、StringBuffer区别及其方法介绍

    字符与字符串 字符类型(char)是Java中的基本数据类型,占2个字节16位,默认值是 ‘u0000’ 。字符是用单引号引住的单个符号. 字符串(String)是用双引号引住的任意个字符,是引用数据类型,默认值是null 。字符串其实就是字符组成的序列 字符串声明 举例: 字符序列 多个字符

    2024年02月09日
    浏览(37)
  • C++ //练习 11.12 编写程序,读入string和int的序列,将每个string和int存入一个pair中,pair保存在一个vector中。

    练习 11.12 编写程序,读入string和int的序列,将每个string和int存入一个pair中,pair保存在一个vector中。 环境:Linux Ubuntu(云服务器) 工具:vim   代码块 运行结果显示如下

    2024年04月10日
    浏览(41)
  • SPEC2006学习使用

    spec 2006学习记录 1. 安装依赖包: 2.解压缩speccpu2006测试工具包,并附执行权限: 3.编辑 tools/src/buildtools 文件,将311行注释,并添加一行export PERLFLAGS=\\\"-A libs=-lm -A libs=-ldl\\\" 4.修改tools/src/make-3.8.0/glob/glob.c文件, 在209行“#if !defined __alloca !defined GNU_LIBRARY”和230行“#endif”前添加“

    2024年02月06日
    浏览(32)
  • 230 - Borrowers (UVA)

    题目链接如下: Online Judge 代码如下:

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包