KMP算法DNA的病毒检测

news/2024/11/23 2:16:21/

DNA为环状检测一个DNA中是否有病毒DNA序列


#include<string>
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
char x[maxn], y[maxn]; //模式串 主串
int nex[maxn];
char s[maxn];
int BF(char x[], int m, char y[], int n)
{int i,j;i=j=0;while(i<n && j<m){if(y[i]==x[j]) ++i, ++j;else i=i-j+1, j=0;}if(j>=m) return i-j;else return -1;
}
void get_nex(char x[], int m, int nex[])
{memset(nex, 0, maxn);int i, j;j=nex[0]=-1;i=0;while(i<m){while(-1!=j && x[i]!=x[j]) j=nex[j];if(x[++i]==x[++j]) nex[i]==nex[j];else nex[i]=j;}
}
int kmp(char x[], int m, char y[], int n)   //模式串 主串
{int i, j;get_nex(x, m, nex);i=j=0;while(i<n){while(-1!=j && y[i]!=x[j]) j=nex[j];i++; j++;if(j>=m) return i-j;}return -1;
}int main()
{while(scanf("%s%s", y,x)){bool flag=false;int m=strlen(x), n=strlen(y);strcat(x,x),strcat(y,y);   //因为环状都扩大1倍for(int i=0; i<m; i++){int t=0;for(int j=i; j<m+i; j++){s[t++]=x[j];  //每个长度m病毒串都跑一遍}get_nex(s, m, nex);
//		    int pos=BF(s, m, y, 2*n);  //BFint pos=kmp(s, m, y, 2*n);  //KMPif(-1!=pos){flag=true;}}if(flag) printf("YES\n");else printf("NO\n");}return 0;
}/*测试样例
abcda abc  
abcda bcd
abcda cda
abcda daa
abcda aab
abcda aad
abcda aac
*/

http://www.ppmy.cn/news/729362.html

相关文章

Nature | 细菌分子靶向病毒DNA

细菌分子靶向病毒DNA 文献导读 为了享受美丽的环境&#xff0c;从苏格兰山坡到热带丛林中&#xff0c;我们可能需要抵御常驻害虫。如果害虫种类多&#xff0c;最好采取广谱防御策略&#xff08;如喷洒驱虫剂&#xff09;。除了拥有大量针对特定病毒的更具体的防御之外&#xf…

SpringBoot2+Vue2实战(十)权限管理

一、父子菜单实现 新建数据库表 sys_menu sys_role 实体类 Role import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;import l…

java面试复习重点,面试必备,内容超级全(起源来自CS-NOTES)

本文来自CS-NOTES https://cyc2018.github.io/CS-Notes/#/ 面试考察的知识点多而杂&#xff0c;要完全掌握需要花费大量的时间和精力。但是面试中经常被问到的知识点却没有多少&#xff0c;你完全可以用 20% 的时间去掌握 80% 常问的知识点。 本文虽然来自CS-NOTES中&#x…

【番外篇】2W字诚意满满的新活:常见接口测试69道面试题,附带答案

最近发现面试题热度 挺好的&#xff0c;不过大家博客都只有面试题&#xff0c;从来都不带答案&#xff0c;顺手就码了点收集到的博客问题的答案 共69道&#xff0c;2W字&#xff0c;耗时两天&#xff08;疯狂暗示&#xff09;欢迎催更吹水&#xff0c;来一个人就是一份催更动力…

桌面排版神器:Affinity Publisher for Mac

你可能不知道&#xff0c;排版神器正式版Affinity Publisher for Mac已经发布了&#xff01;Affinity Publisher 中文版是创意软件工作室 Serif旗下的一款桌面排版应用&#xff0c;可以帮助专业设计人员在每一版面、页面、杂志、书籍和数字出版物中实现最佳的效果&#xff0c;展…

题目:1909.删除一个元素使数组严格递增

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;1909. 删除一个元素使数组严格递增 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 遍历数组&#xff0c;若出现某个元素小于等于其前面的元素时&#xff0c;若其也小于等于前面第二个元素&…

高级自动化测试面试题(Web、App、接口)

一、Web自动化测试 1.Selenium中hidden或者是display &#xff1d; none的元素是否可以定位到&#xff1f; 不能,可以写JavaScript将标签中的hidden先改为0&#xff0c;再定位元素 2.Selenium中如何保证操作元素的成功率&#xff1f;也就是说如何保证我点击的元素一定是可以点…

python 接口自动化测试-----常见面试题汇总

1、软件接口是什么&#xff1f; 程序不同模块之间传输数据并作处理的类或函数 2、HTTP 和 HTTPS 协议区别&#xff1f; 答&#xff1a; https 协议需要到 CA&#xff08;Certificate Authority&#xff0c;证书颁发机构&#xff09;申请证书&#xff0c;一般免费证书 较少&a…