刷题记录——DNA序列

关键字:字符串、滑动窗口

1.题目描述

描述
一个 DNA 序列由 A/C/G/T 四个字母的排列组合组成。 G 和 C 的比例(定义为 GC-Ratio )是序列中 G 和 C 两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的 GC-Ratio 可能是基因的起始点。

给定一个很长的 DNA 序列,以及限定的子串长度 N ,请帮助研究人员在给出的 DNA 序列中从左往右找出 GC-Ratio 最高且长度为 N 的第一个子串。
DNA序列为 ACGT 的子串有: ACG , CG , CGT 等等,但是没有 AGT , CT 等等

数据范围:
字符串长度满足 1≤n≤1000 ,输入的字符串只包含 A/C/G/T 字母

输入描述:
输入一个string型基因序列,和int型子串的长度

输出描述:
找出GC比例最高的子串,如果有多个则输出第一个的子串

示例1

输入:
ACGT
2
输出:
CG
说明:
ACGT长度为2的子串有AC,CG,GT3个,其中AC和GT2个的GC-Ratio都为0.5,CG为1,故输出CG

示例2

输入:
AACTGTGCACGACCTGA
5
输出:
GCACG
说明:
虽然CGACC的GC-Ratio也是最高,但它是从左往右找到的GC-Ratio最高的第2个子串,所以只能输出GCACG。

2.题目解答

使用正则表达式

import java.util.*;
public class Main{public static void main(String [] args){Scanner sc = new Scanner(System.in);while(sc.hasNext()){String str = sc.nextLine();int n = Integer.parseInt(sc.nextLine());int maxValue = 0;String result = "";for(int i = 0 ; i < str.length() - n+1 ; i++){String aim = str.substring(i, i + n);String res = aim.replaceAll("[^CG]","");int cur = res.length() ;if( cur > maxValue){maxValue = cur;result = aim;}}System.out.println(result);}}
}

滑动窗口

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String str = scanner.next();int n = scanner.nextInt();System.out.println(Solution(str, n));}}public static String Solution(String str, int n) {int left = 0, right = 0;int start = 0, count = 0, max = 0;while(right < str.length()) {char c = str.charAt(right++);if(c == 'C' || c == 'G') {count++;}if(count > max){max = count;start = left;if(count == n) {return str.substring(start, start + n);}}// 窗口缩小if(right - left >= n) {char d = str.charAt(left++);if(d == 'C' || d == 'G') {count--;}}}return str.substring(start, start + n);}
}

刷题记录——DNA序列相关推荐

  1. CSP-S集训刷题记录

    $ CSP.S $ 集训刷题记录: $ By~wcwcwch $ 一.字符串专题: 1. [模板]$ manacher $ 算法 模型: 求出字符串 $ S $ 中所有回文串的位置及长度. $ sol ...

  2. $2019$ 暑期刷题记录 $2$(基本算法专题)

    $ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...

  3. Codeforces 刷题记录(已停更)

    Codeforces 每日刷题记录 (已停更) 打'+'是一些有启发意义的题目,部分附上一句话题解,每日更新3题,大部分题目较水. Day ID Problem Tutorial Note 1 1 + ...

  4. 【牛客刷题记录】2021-03-10

    牛客代码刷题记录1 问题一 给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个: 区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输 ...

  5. PAT甲级刷题记录-(AcWing)-(Day06树 8题)

    PAT甲级刷题记录-(AcWing)-(Day06树 8题) 课程来源AcWing 其中AcWing中的题目为翻译好的中文题目 今日刷题列表 1110 Complete Binary Tree 111 ...

  6. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  7. 小峰峰的pat甲级刷题记录1020

    小峰峰的pat甲级刷题记录1020 方法一:通过后序和中序序列构建树,再层序输出 #include<iostream> #include<vector> using names ...

  8. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  9. 重走长征路---OI每周刷题记录---8月16日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

最新文章

  1. 点击空白 键盘消失 (待续……)
  2. 2000亿次开放学习后,DeepMind的智能体成精了
  3. 一些基本算法的递归实现
  4. FeHelper的安装与使用
  5. 第二十二章:动画(八)
  6. 汽车仿真效率30%↑、药物研发效率20倍↑,阿里云获HPC CHINA 2020“最佳行业应用奖”
  7. SAP License:SAP的采购组
  8. Linux Redis集群搭建与集群客户端实现
  9. linux交叉编译环境变量设置,arm-linux-gcc安装 和 环境变量设置
  10. 火狐浏览器无法选择安装盘
  11. windows 匿名管道: 父进程与子进程通信 (进程间通信之CreatePipe)
  12. 哔哩哔哩电脑版下载后音频与画面分离,视频没有声音
  13. 「ZigBee模块」基础实验(1)点亮LED
  14. 基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署
  15. RabbitMQ 开发时指定消息消费者的方式
  16. 2019-5-15-影子系统让-C++-程序无法运行
  17. 基于RedHat6.5的Greenplum环境配置
  18. STC15单片机上电复位延时180ms才执行程序
  19. 我的世界服务器高度无限吗,我的世界:玩家突破Y=256格高度限制,难道是假截图?毫无破绽...
  20. 程序员刚写完代码 , 就被开除了,网友笑到抽筋

热门文章

  1. 完全卸载Android Studio(卸载得干干净净)
  2. (二)设计模式——构建器,原型模式
  3. Java日期与时间API(详解全部新与旧API,含代码例子)
  4. 无线渗透实战(1)--aircrack破解wifi密码
  5. mysql查询id_Mysql基本查询语句及方法
  6. novo7极光2 linux,夏昆冈作品 - Ainol 艾诺 NOVO7 极光II 平板电脑音质测评报告 [Soomal]...
  7. oa办公自动化有什么主要功能和作用?
  8. 【Web技术】1495- 开发 HTML 转图片组件
  9. Linux 运行shell脚本出现错误总结
  10. 信息系统项目管理师重要考点记忆口诀