2018.12.17-dtoj-1170-最长公共子串
题目描述:
给定两个字符串A和B,求最长公共子串。
算法标签:后缀数组
以下代码:
#include<bits/stdc++.h> #define il inline using namespace std; const int N=2e5+5;char s[N],a[N],b[N]; int n,l1,l2,sa[N],rk[N],height[N],c[N],x[N],y[N],ans; il void getsa(){int m=128;for(int i=1;i<=n;i++)c[x[i]=s[i]]++;for(int i=2;i<=m;i++)c[i]+=c[i-1];for(int i=n;i;i--)sa[c[x[i]]--]=i;for(int k=1;k<=n;k<<=1){int num=0;for(int i=n-k+1;i<=n;i++)y[++num]=i;for(int i=1;i<=n;i++)if(sa[i]-k>0)y[++num]=sa[i]-k;for(int i=1;i<=m;i++)c[i]=0;for(int i=1;i<=n;i++)c[x[i]]++;for(int i=2;i<=m;i++)c[i]+=c[i-1];for(int i=n;i;i--)sa[c[x[y[i]]]--]=y[i],y[i]=0;swap(x,y);x[sa[1]]=1;num=1;for(int i=2;i<=n;i++)x[sa[i]]=(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k])?num:++num;if(num==n)break;m=num;}for(int i=1;i<=n;i++)rk[sa[i]]=i; } il void geth(){int k=0;for(int i=1;i<=n;i++){if(rk[i]==1)continue;if(k)k--;int j=sa[rk[i]-1];while(j+k<=n&&i+k<=n&&s[i+k]==s[j+k])k++;height[rk[i]]=k;} } int main() {scanf(" %s",a+1);scanf(" %s",b+1);l1=strlen(a+1);l2=strlen(b+1);for(int i=1;i<=l1;i++)s[i]=a[i];n=l1;s[++n]='#';for(int i=1;i<=l2;i++)s[++n]=b[i];s[++n]='$';getsa();geth();for(int i=2;i<=n;i++){if((sa[i-1]<=l1&&sa[i]<=l1)||(sa[i-1]>l1+1&&sa[i]>l1+1))continue;ans=max(ans,height[i]);}printf("%d\n",ans);return 0; }
View Code
转载于:https://www.cnblogs.com/Jessie-/p/10131489.html
2018.12.17-dtoj-1170-最长公共子串相关推荐
- SPOJ - PHRASES Relevant Phrases of Annihilation —— 后缀数组 出现于所有字符串中两次且不重叠的最长公共子串...
题目链接:https://vjudge.net/problem/SPOJ-PHRASES PHRASES - Relevant Phrases of Annihilation no tags You ...
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
最大子序列 最大子序列是要找出由数组成的一维数组中和最大的连续子序列.比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大:而 {5,-6,4,2}的最大子序列是{4, ...
- 动态规划最常见的习题 (最长公共子串、最长公共子序列、最短编辑距离)
(1)理论部分: (2)习题: 最长公共子串: 1 package month7.dp; 2 3 //https://www.nowcoder.com/questionTerminal/181a1a7 ...
- 【恋上数据结构】动态规划(找零钱、最大连续子序列和、最长上升子序列、最长公共子序列、最长公共子串、0-1背包)
动态规划(Dynamic Programming) 练习1:找零钱 找零钱 - 暴力递归 找零钱 - 记忆化搜索 找零钱 - 递推 思考题:输出找零钱的具体方案(具体是用了哪些面值的硬币) 找零钱 - ...
- 动态规划套路在最长公共子串、最长公共子序列和01背包问题中的应用
2019独角兽企业重金招聘Python工程师标准>>> 适合动态规划(DP,dynamic programming)方法的最优化问题有两个要素:最优子结构和重叠子问题. 最优子结构指 ...
- 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和...
最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和 文章作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathi ...
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...
作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...
- 采用顺序结构存储串,设计实现求串S和串T的一个最长公共子串的算法。
算法分析 先固定字符串str1,取其第一个字符str1[0],(KMP算法)查找str1和str2中有没有以该字符开头的公共子串:即将str[0]与str2中的字符挨个比较,若遇到相等的,再接着比较s ...
- 最长公共子串与最长公共子序列
1. 最长公共子串 要求子串连续,不同于最长公共子序列 def LCS(s1, s2):len1, len2 = len(s1), len(s2)# 匹配矩阵,用来记录两个字符串中所有位置的两个字符之 ...
最新文章
- python判断输入类型怎么做_如何检查输入类型?
- promise是什么?简单分析promise原理
- flutter怎么添加ios网络权限_视频号直播间怎么添加购物车商品;超详细流程步骤。丨国仁网络资讯...
- 智能云如何加速产业智能化?百度CTO王海峰2020全球智博会擘画蓝图
- K2 Blackpearl中从数据库直接删除流程实例之K2Server表
- datagrid 重载本地数据_jQuery easyui datagrid重新加载数据
- 剖析Linux内核源码分析《入门技术栈》
- 脉冲神经网络 神经元模型-Izhikevich模型(3)
- 开源开放 | OMAHA 联合 OpenKG 发布新冠诊疗图谱数据
- python 什么是鸭子类型
- 拼接播放地址_无极婚礼布置地址,好的婚礼服务多少钱_大伟庆典
- html调用properties,聊聊html中的properties和attributes
- mysql dump 1449_mysqldump 1449错误解决办法
- 信号与槽是如何实现的_Nature | 破解Wnt信号高效远距离传递之谜
- 怎么mac ftp服务器文件夹,mac 访问 ftp服务器文件夹权限
- Foxmail 7.0中导入地址簿
- DES EBC模式前台加密JAVA后台解密
- 有刷直流电机工作原理详解
- 月圆之夜-体验报告(完稿时间2021/6/11)
- C#通过操作注册表检测office版本
热门文章
- ubuntu自定义分辨率
- [转]Java 对象锁-synchronized()与线程的状态与生命周期
- java.lang中String=和equals()函数解析
- 好消息,scott的asp.net 2.0数据导航系列全部出版了
- GitHub上的私有仓库转换为共有仓库以及共有仓库转换为私有仓库
- git push提交时卡住
- [Azure] 使用 Visual Studio 2013 管理中国版 Azure 订阅
- 广搜最短路径变形,(POJ3414)
- IBM 启动网格项目 -- “全球社区网格”,招募志愿者
- 【ASP.NET Core】处理异常(下篇)