文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

解析

我的做法是二分答案,暴力枚举子串,对其他的字符串进行KMP。
复杂度logL*L2
没有一次AC,因为忘记了字符串清零!,否则它会和上次二分的字符串没被覆盖到的部分连在一起。
之前遇到过类似的问题了,没有引起重视,需要注意一下

做完后看了下题解,其实不用二分答案,用最短串枚举起点,对其他串进行KMP匹配,记录最大的失配位置就可以了,复杂度比我的做法少一个log

代码

(还是带log的做法。。。)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
typedef unsigned long long ull;
const int N = 2504;
const int M=1e7+5;
const int mod=1e7+3;
int n,m;
int l0[6],l;
char ss[6][N],s[N];
int p[N];
void solve(){p[1]=0;l=strlen(s+1);for(int i=1,j=0;i<=l;i++){while(s[i+1]!=s[j+1]&&j) j=p[j];if(s[i+1]==s[j+1]) j++;p[i+1]=j;}
}
bool kmp(int k){for(int i=0,j=0;i<=l0[k];i++){while(ss[k][i+1]!=s[j+1]&&j) j=p[j];if(ss[k][i+1]==s[j+1]) j++;if(j==l){return true;}}return false;
}
bool check(int k){//printf("check: %d\n",k);for(int i=1;i+k-1<=l0[1];i++){//memset(s,0,sizeof(s));for(int j=1;j<=k;j++){s[j]=ss[1][i+j-1];}//printf("  s=%s\n",s+1);solve();int flag=1;for(int j=2;j<=n;j++){if(!kmp(j)){//printf("j=%d not!\n",j);flag=0;break;}}if(flag) return true;}return false;
}
int main(){scanf("%d",&n);int st=0,ed=2000;for(int i=1;i<=n;i++){scanf(" %s",ss[i]+1);l0[i]=strlen(ss[i]+1);ed=min(ed,l0[i]);}while(st<ed){int mid=(st+ed+1)>>1;if(check(mid)) st=mid;else ed=mid-1;}printf("%d",st);return 0;
}
/*
3
abdcdjjjds
ajjsnbadcd
cdjjsdcdda
*/

YBTOJ:公共子串(KMP)相关推荐

  1. 第六周作业(等值字串,KMP匹配,大整数相乘,最长公共子串,判断两个字符串是否匹配,最长回文子串,年号字串)

    目录 1.等值字串 2.KMP匹配 3.大整数相乘 4.最长公共子串 5.判断两个字符串是否匹配 6.最长回文字串 7.年号字串 补发一下,原来忘记发了. 1.等值字串 [问题描述]如果字符串的一个子 ...

  2. 数据结构课程设计---最长公共子串

    数据结构课程设计,由用户输入两个字符串串X和Y,再由用户输入一个任意的字符串Z,实现以下功能: ①如果字符串Z是字符串X的子串,则显示Z在X中的位置并记录,如果字符串Z是字符串Y的子串,则显示Z在Y中 ...

  3. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  4. 采用顺序结构存储串,设计实现求串S和串T的一个最长公共子串的算法。

    算法分析 先固定字符串str1,取其第一个字符str1[0],(KMP算法)查找str1和str2中有没有以该字符开头的公共子串:即将str[0]与str2中的字符挨个比较,若遇到相等的,再接着比较s ...

  5. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  6. 9.69最长公共子串

    最长公共子串 #include<iostream> #include<cstring> using namespace std; char a[200] = "AAC ...

  7. java实现最长连续子序列_最长公共子序列/最长公共子串 Python/Java实现

    关注我的微信公众号:后端技术漫谈 不定期推送关于后端开发.爬虫.算法题.数据结构方面的原创技术文章,以及生活中的逸闻趣事. 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边 ...

  8. SPOJ - PHRASES Relevant Phrases of Annihilation —— 后缀数组 出现于所有字符串中两次且不重叠的最长公共子串...

    题目链接:https://vjudge.net/problem/SPOJ-PHRASES PHRASES - Relevant Phrases of Annihilation no tags  You ...

  9. 基于visual Studio2013解决面试题之1002公共子串

     题目 解决代码及点评 /*求两个字符串的最小公共子串这道题简单的两个字符串遍历即可 */#include <iostream> using namespace std; const ...

  10. 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离

    最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列.比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大:而 {5,-6,4,2}的最大子序列是{4, ...

最新文章

  1. 斯坦福大学、DARPA与硅谷公司共同分析前沿科技发展趋势
  2. java修改文件的大小限制_Struts2修改上传文件大小限制方法解析
  3. 预测2019浙大计算机考研分数,浙江大学2019年考研分数线公布
  4. vue 如何将参数放到连接上_通过Vue路由传参的两种方式及Vue组件中接收参数的方式...
  5. 对计算机财务管理的理解,计算机财务管理
  6. ubuntu sun-java6-jre_在 Ubuntu Lucid 下请回 Sun Java6 Jre, 赶走 OpenJDK
  7. 反射机制及其应用场景
  8. 基于DCT系数的实时监控中运动目标检测
  9. 数据交换平台有哪些功能特点
  10. Stroustrup 谈 C++ 11的新特性
  11. 清华085211计算机技术,2018年清华大学计算机系计算机技术考研(085211)考试科目、参考书目、复习经验---新祥旭考研...
  12. html逐字显示并停止,Pr字幕如何让他逐字出现逐字消失?
  13. 内容分发网络:请简述 CDN 回源如何工作?
  14. 网站调用百度地图展示位置,调用百度开放平台api 动态静态调用
  15. 一文理解UDS安全访问服务(0x27)
  16. 高纬度矩阵运算--NumPy
  17. 解决网页缩放百分比页面变形问题
  18. 扩散模型探索:DDIM 笔记与思考
  19. Java Web中的一些概念(JSP、Servlet以及过滤器等)
  20. Python 的异常处理

热门文章

  1. mysql utf8 bin设置_[mysql]修改collation为utf8_bin
  2. python赋值语句格式_Python赋值语句后逗号的作用分析
  3. java注解 sql_mybatis中注解映射SQL示例代码
  4. python求函数极值_python 遗传算法求函数极值的实现代码
  5. 有哪些编辑软件可以编辑c语言,可以推荐一个手机上最好用且免费的c语言编辑器吗?...
  6. 算法题目——爬楼梯(动态规划)
  7. 算法设计与分析——回溯法——旅行售货员问题
  8. 算法设计与分析——动态规划——最长公共子序列
  9. 数据结构——二叉树的递归算法
  10. [SpringBoot2]welcomefavicon