目录
问题
输入患者基因与病毒基因序列,测试目标是否感染病毒
重难点
病毒为环状结构,以输入baa为例,baa对应3种结构baa,aab,aba。感染每一种都算阳性,显示YES。
测试样例及输出

思路
与bf算法相同,先将病毒的字符串翻倍,头指针从第一位开始,每次右移一位,取n次(n为病毒字符串长度)长度为n的字符串(准确的说是改变指针,而没有切割串)逐一与患者基因序列比对。
在kmp算法中,尝试过不分解模式串,直接计算整个的next数组,并放入kmp中计算。发现虽然头指针向后移动了,由于前面的数字还在,next数组是以原数组计算的,会使J=next[j]导向错误。所以在这里kmp必须将字符串掐头去尾。
将模式串分解为长度等于病毒长度的字符串(切割第一段的字符串),在kmp函数中,匹配操作之前,调用getnext求每一个子串的next,再跑匹配

该博客探讨了使用KMP算法进行病毒感染检测的问题。重难点在于病毒的环状结构,需要考虑所有可能的匹配情况。作者通过对比测试样例,发现直接使用KMP算法的next数组会导致错误,解决方案是分解病毒串并为每个子串单独计算next数组。博客总结提到,尽管KMP算法在某些简单数据上可能并不如BF算法高效,但理解其适用场景至关重要。

被折叠的 条评论
为什么被折叠?



