sdut 1008 最大公共字串

这是一个关于寻找两个字符串间最大公共子串的问题,题目来源于sdut 1008。给出的时间限制是1000MS,内存限制为32768K。文章提供了题目描述、输入和输出格式,并给出了示例。作者推荐了一篇相关的博客,阅读后能帮助理解并解决此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最大公共子串

Time Limit: 1000MS Memory limit: 32768K

题目描述

从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下地字符按原来顺序组成的串。例如:“ ”,“a”,“xb”,“aaa”,“bbb”,“xabb”,“xaaabbb”都是串“xaaabbb”的子串。(例子中的串不包含引号。)

编程求N个非空串的最长公共子串的长度。限制:2<=N<=100;N个串中的字符只会是数字0,1,…,9或小写英文字母a,b,…,z;每个串非空且最多含100个字符;N个串的长度的乘积不会超过30000。

输入

文件第1行是一个整数T,表示测试数据的个数(1<=T<=10)。接下来有T组测试数据。各组测试数据的第1行是一个整数Ni,表示第i组数据中串的个数。各组测试数据的第2到N+1行中,每行一个串,串中不会有空格,但行首和行末可能有空格,这些空格当然不算作串的一部分。

输出

输出T行,每行一个数,第i行的数表示第i组测试数据中Ni个非空串的最长公共子串的长度。

示例输入

1
3
ab
bc
cd

示例输出

0
### 使用Python计算最大公约数和最小公倍数 #### 定义概念 最大公约数(Greatest Common Divisor, GCD),指的是能够同时整除几个给定正整数的最大那个正整数。而最小公倍数(Least Common Multiple, LCM)则是指能被这些整数共同整除的最小的那个正整数。 #### 利用内置库`math` 为了简化编程工作量并提高效率,在Python中可以直接调用标准库中的`math.gcd()`来获取两个数值之间的最大公约数[^3]: ```python import math def gcd(x, y): return math.gcd(x, y) ``` 对于最小公倍数,则可以根据上述定义以及两者间的关系通过如下方式实现: ```python def lcm(x, y): return abs(x * y) // math.gcd(x, y) ``` 这里采用的是先求得两者的绝对值相乘的结果再去除以它们的最大公约数的方式得到最终结果,这样做的好处是可以处理负数的情况。 如果想要一次性获得多于两个数字间的最大公约数最小公倍数,可以通过循环迭代的方法逐步累积计算得出。 #### 自定义算法实现 当然也可以不依赖任何外部库来自行编写函数完成相同的功能。欧几里得算法是一种经典的用于寻找两个自然数的最大公约数的有效方法之一。基于此原理可写出如下代码片段用来代替`math.gcd()`功能: ```python def euclidean_gcd(a, b): while(b != 0): temp = a % b a = b b = temp return a ``` 而对于LCM部分依旧沿用之前提到过的公式进行转换即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值