博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3080解题报告(暴力、最大公共子串)
阅读量:4123 次
发布时间:2019-05-25

本文共 1197 字,大约阅读时间需要 3 分钟。

 

POJ 3080,题目链接http://poj.org/problem?id=3080

题意:

就是求m个长度为60的字符串的最长连续公共子串,2<=m<=10

规定:

1、最长公共串长度小于3输出no significant commonalities

2、若出现多个等长的最长的子串,则输出字典序最小的串

思路:

1. 求公共最小连续子串,那么先把第一个串长度>=3的所有连续子串找出来,然后由短到长查看所有主串是否有该子串。

2. 如果发现一个公共子串,那么就开始找长度+1的公共子串;如果指定长度的所有子串都找不出一条是共有的,那么-1长度就是最长的公共子串。

例:长度为3的子串匹配时,当发现第一个长度为3的公共子串,则开始找长度为4的子串,如果发现第一个长度为4的子串,则开始找长度为5的子串,如果没有找到长度为5的公共子串,那么他们的最长公共子串长度就为4,此时就在长度为4的所有子串中,找出字典排序在前的。(暴力~

代码:

//680K	32MS#include 
#include
#include
#include
using std::string;using std::vector;#define DNA_Len 60bool BMSearch(const char* s, const char* t){ const char *p = strstr(s, t); if (p) return true; else return false;}int main(){ char temp[DNA_Len+1]; vector
subStr[DNA_Len+1]; // 3-60 int caseNum; scanf("%d",&caseNum); while (caseNum-- > 0) { int deqNum;//2 <= m <= 10 scanf("%d", &deqNum); char **p = new char*[deqNum]; for (int i=0; i
= 3){ //多个最长子串 按照字典排序 int len = strlen(temp); vector
multiString; bool searched; for (int i=0,count=subStr[len].size(); i
0){ strcpy(temp, multiString.at(i).c_str()); } } printf("%s\n", temp); } else { printf("no significant commonalities\n"); } for (int i=0; i

 

 

 

转载地址:http://omtpi.baihongyu.com/

你可能感兴趣的文章
卷积神经网路---第一小例子:解压gz,显示图片
查看>>
python-显示图片 缩放图片 保存图片
查看>>
卷积神经网络中的部分问题
查看>>
DirectX 配置 vs2013 Win10 64bit
查看>>
MFC总结(19) --- CStrig转换成十六进制数
查看>>
win7安装VMwareworkstation+Ubuntu12.04
查看>>
nv12——resize
查看>>
Ubuntu看编译器配置 make menuconfig
查看>>
linux微妙和秒定时器
查看>>
linux 定时器 网上转载的 作为参考
查看>>
拆带13个字节帧头的264文件
查看>>
.tar.bz2文件解压命令
查看>>
CentOS 6.0 安装过程图解
查看>>
Redis几个认识误区
查看>>
Mysql 自动备份与恢复
查看>>
IDEA如何打包可运行jar,外部引用jar包版
查看>>
Ajax (部分二:prototype.js代码后半部分)自己做的,总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
查看>>
Ajax (部分二:prototype.js代码前半部)自己做的,总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
查看>>
Ajax (部分一)自己做的,总结页面向后台传Form值、单个值和后台向前台传一个或是一组值
查看>>
JS 横向图片跑马灯效果
查看>>