最长公共子串的长度

编写函数,获取两段字符串的最长公共子串的长度 题目:编写函数,获取两段字符串的最长公共子串的长度例如: S1 = GCCCTAGCCAGDE S2 = GCGCCAGTGDE 这两个序列的最长公共字串为GCCAG,也就是说返回值为5。参数:str1和str2表示两个字符串 返回值:返回两段字符串的最长公共子串的长度int findLargestSizeString(String str1, String str2)此题为动态规划问题,在 阅读详情

输入两个长度均不超过1000的字符串,求它们的最长公共子串的长度。 

#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
const LL mod=1000000007;
const LL p=10000019;
const LL maxn=1010;  //字符串的最长长度 

LL powP[maxn];  
LL H1[maxn]={0},H2[maxn]={0};
vector<pair<int,int> > pr1,pr2;  //存放子串hash值、子串长度

 
void init(int len)
{
	powP[0]=1;
	for(int i=1;i<=len;i++)
	{
		powP[i]=(powP[i-1]*p)%mod;
	}
}

void calH(LL H[],string &str)
{
	H[0]=str[0];
	for(int i=1;i<str.length();i++)
	{
		H[i]=(H[i-1]*p+str[i])%mod;
	}	
}

int calSingleSubH(LL H[],int i,int j)
{
	if(i==0) return H[j];
	return ((H[j]-H[i-1]*powP[j-i+1])%mod+mod)%mod;
}

void calSubH(LL H[],int len,vector<pair<int,int> > &pr)
{
	for(int i=0;i<len;i++)
	{
		for(int j=i;j<len;j++)
		{
			int hashValue=calSingleSubH(H,i,j);
			pr.push_back(make_pair(hashValue,j-i+1));
		}
	}
}

int getMax()
{
	int ans=0;
	for(int i=0;i<pr1.size();i++)
	{
		for(int j=0;j<pr2.size();j++)
		{
			if(pr1[i].first==pr2[j].first)
			{
				ans=max(ans,pr1[i].second);
			}
		}
	}
	return ans;
}

int main() 
{
	string str1,str2;
	
	getline(cin,str1);
	getline(cin,str2);
	
	init(max(str1.length(),str2.length()));
	
	calH(H1,str1);
	calH(H2,str2);
	
	calSubH(H1,str1.length(),pr1);
	calSubH(H2,str2.length(),pr2);
	
	printf("ans=%d\n",getMax());
	return 0;	
}

 

关于公共子串的分析,求两个字符串中所有公共子串个数,以及最长公共子串和长度。 给出两个字符串,需要计算它们所有公共子串的个数,以及其中最长公共子串和长度值。并用空格隔开;如果没有,则输出为0. 阅读详情

相关推荐

CMOS 半加器和全加器&&数字集成电路&& Cadence Virtuoso

数字集成电路——半加器和全加器

计科小学生的博客 1万+

最长公共子序列--求最长公共子串长度

最长公共子序列算法应用非常广泛:比如染色体中DNA片段的的研究,基于最长公共子序列的微博谣言溯源研究等等。所以掌握与应用该基础算法是十分必要的。

Austin_的博客 1299

360加固DEX解密与ELF修复技术解析

本文深入解析360加固的DEX解密与ELF修复技术,详细介绍了其多层保护机制、Java层入口分析、Native层加载流程及反调试绕过技巧。通过RC4和zlib解密技术,结合Frida工具实现内存Dump和ELF文件修复,为逆向工程师提供实用解决方案。

weixin_29327525的博客 512

最长公共子串

首先这题和”最长重复子串”不一样,本题相对于”最长重复子串”的条件更加苛刻一点,”最长重复子串”选择的子串可以不连续。我们需要开一个二维数组,内存为4*10000*10000,大约400MB,很明显这里会爆栈,所以我们得优化掉其中的一维,使其变为一维。那么我们怎么优化呢,我们可以定义一个dp[N],其中dp[i]代表的是以str[i]结尾的最长的公共子串的长度为dp[i].这里我们可以如果使用暴力算法,由于最长的子串只有10000,暴力算法的时间复杂度为O(N^2),时间复杂度勉强可以达到。

m0_70182646的博客 175

人工智能的未来:从弱 AI 到通用人工智能(AGI)

从最初的简单自动化程序,到如今的深度学习大模型(如 ChatGPT、DeepSeek、Grok),AI 逐步从弱人工智能(Weak AI)向更智能、更自主的方向发展。AI 的发展将影响就业市场,取代重复性、低技能的工作,同时创造新的高技能岗位。尽管深度学习带来了巨大的进步,但它仍然依赖大量标注数据进行训练,对新环境的泛化能力有限,这也是当前 AI 迈向 AGI 的关键障碍之一。本文将探讨 AI 从弱 AI 进化到 AGI 的可能性,分析目前 AI 技术的局限性,并展望未来 AI 在各个行业的影响。

qq_20245171的博客 1万+

IC618新手避坑指南:从零在Linux上配置Cadence Virtuoso环境(含cds.lib文件详解)

本文详细介绍了在Linux系统上配置Cadence Virtuoso IC618环境的完整指南,特别针对新手常见问题提供解决方案。重点解析了cds.lib文件的关键配置,包括库路径定义和工艺库管理,并分享了高效工作流设置和典型问题排查技巧,帮助工程师快速搭建稳定的EDA设计环境。

weixin_26805597的博客 556

常考数据结构与算法:最长公共子串

题目描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串 题目保证str1和str2的最长公共子串存在且唯一。 示例1 输入 "1AB2345CD","12345EF" 返回值 "2345" 思路 1、把两个字符串分别以行和列组成一个二维矩阵。 2、比较二维矩阵中每个点对应行列字符中否相等,相等的话值设置为1,否则设置为0。 3、通过查找出值为1的最长对角线就能找到最长公共子串。 比如:str=acbcbcef,str2=abcbced,则str...

m0_37564426的博客 1583

接口操作MySQL跟MongoDB事务回滚问题

通常使用的事务注解:@Transactional 是不会对MongoDB生效的,但是在一些生产接口中无法避免同时使用MySQL跟MongoDB的操作。

weixin_45932023的博客 1579

最长公共子串长度

转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8377851.html 最长公共子串长度 1 #include <iostream> 2 #include <algorithm> 3 #include <math.h> 4 #include <cstring> ...

weixin_30599769的博客 189

别再用Excel硬算传热了!用MATLAB/Octave复现国赛数学建模A题(附完整代码与避坑指南)

本文详细介绍了如何利用MATLAB/Octave高效解决数学建模中的传热问题,替代传统的Excel计算方法。通过复现2018年国赛A题的高温作业服传热模型,从理论推导到代码实现,提供了完整的有限差分法解决方案和参数拟合技巧,帮助读者提升数学建模效率和准确性。

weixin_30512965的博客 382

《阵列信号处理及MATLAB实现》阵列响应矩阵(均匀线阵、均匀圆阵、L型阵列、平面阵列和任意阵列)

《阵列信号处理及MATLAB实现》内容总结,如需阅读更详细内容请购买正版书籍。

APPLECHARLOTTE的博客 1万+

数据结构与算法之最长公共子串

最长公共子串问题是指给定两个字符串S1和S2,求它们的公共子串中最长的那一个。其实就是求两个字符串的最长重复子串。最朴素的算法就是枚举S1和S2的每一对子串,然后判断它们是否相等,时间复杂度是O(n^3)。但是这种算法效率太低,无法满足实际需求。一般采用动态规划的思想进行求解,令dp[i][j]表示以S1的前i个字符和S2的前j个字符为结尾的公共子串的长度,当S1[i]=S2[j]时,dp[i][j]=dp[i-1][j-1]+1;否则dp[i][j]=0。最后找出dp[i][j]的最大值即可。

weixin_47225948的博客 4925

20.Labview使用子vi进行VI间的数据传递详解(模块化)

子VI(模块化)题主在题注中也提到, 子VI的建立只是为了减少程序的负担,那么我们当使用子VI的时候首先就要明确什么是子VI?什么样的程序可以作为子VI?首先我们来看NI官方给的定义,具体说明如下图所示:题主已经将重点画出来了,在官方的解释中将子VI定义为了模块化,大家可以看到创建模块化子VI的特点在于减少代码重复工作优化了程序的框架结构。把一个代码打包,需要的时候就拎出来让他处理处理,不需要的时候就让它躺在我的列表里就行了也不占用运行空间。那么创建子VI需要需要注意以下几点:①任何一个程序。

关注我,更多技术问题欢迎私聊~ 3516

最长公共子串及其长度

求2个串的最长公共子串及其长度//最长公共子串简称为lcs//a[0]~a[i-1]的子串记为ai,a[0]~a[i-2]的子串记为a(i-1)//b[0]~b[j-1]的子串记为bj,b[0]~b[j-2]的子串记为b(j-1)#includeiostream>#includestring>#includevector>using namespace std;string a;//串ai

寻找快乐 977

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

字符串——最长公共子串(长度、子串)

1 public static int longestCommonSubstring(String s1, String s2) { 2 int len1 = s1.length(); 3 int len2 = s2.length(); 4 int result = 0; 5 int[] index = ...

weixin_30670965的博客 175

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java求最长公共子串的长度

1这道题目就是给定两个字符串,然后求这两个字符串的最长公共子串的最大长度,假设我的f()方法是来求两个字符串的最大公共子串,从头开始逐一比较,如果相等,则 继续调用这个方法,使得递归的长度+1,如果不相等,则只要比较s1截掉一个和s2比较,和s2截掉和s1比较,两个中的最大者,如果s1或者s2中有一个长度为0,则最大公共长度就是0,return 2.代码示例: package ...

andunxu1008的博客 639

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

最长公共子串和其长度

利用编辑距离计算 然后敲模板,得最大公共字串长度 然后进行回溯,得最长公共子串 #include <iostream> #include <cstring> #include <cstdio> using namespace std; int dp[1001][1001]; char X[1001]; char Y[1001]; int i, j; ...

shuaizhijun的博客 329

求两个字符串中的最长公共子串的长度

利用二位矩阵对角线解决 #include #include using namespace std; int getLCSLength(string str1, string str2){ int **temp= new int*[(str1.length())*(str2.length())]; //声明一个二维数组,存储最长公共子串长度 int length = 0; //最长公共子串

yangshuangtao的专栏 2371

7-8 两个字符串的最长公共子串长度 (15分)

7-8 两个字符串的最长公共子串长度 (15分) 求两个字符串的最长公共子串长度。 输入格式: 输入长度≤100的两个字符串S和T。 输出格式 输出两个字符串的最长公共子串长度。 输入样例 ABCBDAB BDCABA 输出样例 2 第一次尝试着写博客,打算找道水题试试水,这道题开始做的时候没什么思路,打算对第S的每个字符对T进行遍历,写了半天感觉思路不是很清晰,所以想了想其他的方法,最后用二维数...

weixin_43849649的博客 4282

找两个字符串的最长公共子串的最大长度

题目:找两个字符串的最长公共子串的最大长度 分析:从较短的那个子串的长度串依次判断是不是长串的子串,即从将可能的最长公共子串开始比较,那么只要匹配到,一定是最长的子串。 int max_common_str(const string& s1, const string& s2) { string longstr; string shortstr; if (s1.s...

lyl194458的博客 1518

最长公共子串长度的实现

求两个字符串的最长公共子串长度 ABCBA 和 BABCA 的最长公共子串是 ABC,长度为 3 代码 static int Lcs(String str1,String str2) { if(str1==null&&str2==null) return 0; char[] char1=str1.toCharArray(); if(char1.length==0) return 0; char[] char2=str2.toCharArray(); if(char

Arithmetic-logic 496

【算法】C++ 最长公共子串长度

最长公共子串长度 串 A 以 i 为结尾和串 B 以 j 为结尾的最长公共子序列长度maxlen[i][j]=max(maxlen[i][j-1],maxlen[i-1][j]) 当A的第i-1字符个和B的第j-1个字符一样时maxlen[i][j] = maxlen[i-1][j-1] + 1; #include <stdio.h> #include <string.h> #define N 256 int f(const char* s1, const c...

weixin_44566432的博客 1765

Poj 2774两个字符串的最长公共子串长度

给A ,B 两个串  要求两个字符串的最长公共子串长度 只需要用'$',分割一下就好了,不能用0 A$B #include #include #include #include #define MIN(a,b) (a)>(b)?(b):(a) #define MAX(a,b) (a)>(b)?(a):(b) #define INF 0x3f3f3f using name

#include<Excelsior> 865

20170909_最长公共子串长度

20170909_最长公共子串长度

风暴计划 510
上一篇: 字符串hash
下一篇: 待续....
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值