趋势科技笔试题 DNA串查重 (4进制)
来源:互联网 发布:太原软件 编辑:程序博客网 时间:2024/05/02 01:11
题目大意:给定一个DNA字符串由'A', 'T', 'C', 'G'表示,求长度为10的重复出现的DNA子串,要求不能使用系统或第三方的数据结构,时间复杂度要求为O(n)
题目分析:考虑到只有'A', 'T', 'C', 'G'四种核苷酸,因此可以用一个10位4进制数来唯一标识每个长度为10的DNA子串,这样最大的数字才4^10=1e6+,直接开个2e6的数组记录子串出现的次数,每次只要模一个4^10,从左往右依次记录,遇到出现过的输出即可。复杂度O(n)
样例输入:
TAGCTAATCAGCTAATCAGGTAGCTAATCAGGAACTG
样例输出:
AGCTAATCAG
TAGCTAATCA
GCTAATCAGG
#include <iostream>#include <string>using namespace std;int const MAX = 2e6;int const MOD = (1 << 20);int mp[MAX];string str;int change(char s) {if (s == 'A') {return 0;}if (s == 'T') {return 1;}if (s == 'C') {return 2;}return 3;}int main() {cin >> str;int n = str.length();int cur = 0;for (int i = 0; i < 10; i ++) {cur = cur * 4 + change(str[i]);mp[cur] ++;}for (int i = 10; i < n; i ++) {cur = cur * 4 + change(str[i]);cur %= MOD;if (mp[cur] == 1) {for (int j = i - 9; j <= i; j ++) {printf("%c", str[j]);}printf("\n");}mp[cur] ++;}}
0 0
- 趋势科技笔试题 DNA串查重 (4进制)
- 趋势科技笔试题
- 趋势科技笔试题
- 趋势科技笔试题
- 趋势科技笔试题
- 趋势科技08笔试题
- 趋势科技笔试题1
- 趋势科技几道笔试题
- 趋势科技2014校园招聘笔试题
- 趋势科技2015笔试题-南京
- 趋势科技笔试【6】
- 趋势科技笔试【7】
- 趋势科技笔试结束
- 转:趋势科技的笔试
- 趋势科技笔试题C++的一道题
- 趋势科技2011校招笔试题+答案解析
- C++经典笔试题及参考答案-趋势科技
- 趋势科技2014年暑期实习生笔试题
- 左右法则小练习
- 2016年11月13日安装cocoapods
- 文件锁(Filelock)与锁定映射文件部分内容
- 11.13 模拟题
- [Sqoop]Sqoop导入与导出
- 趋势科技笔试题 DNA串查重 (4进制)
- android inline hook 学习笔记
- JSP+Servlet+JavaBean+JDBC实现用户登录,及成绩查询
- OKHTTP简单解析
- Swift 3.0:String初始化器Encoding不能为nil的解决
- 软件工程的生存周期
- 浅谈如何搭建互联网业务风控系统
- struct内存对齐
- JavaWeb session的使用和获取