【问题描述】 最长公共子串,题目描述:a b两个字符串,求a b的最长公共子串长度,输出最长公共子串长度。子串与子序列不同,子串必须是连续的,而子序列可以不连续。 【输入形式】 分两行输入两个字符串 【输出形式】 一行输出长度 【样例输入】 abcccabccsccs abcabcabccs 【样例输出】 6
时间: 2023-12-02 21:02:54 浏览: 214
输入两个字符串,求它们最长公共字串的长度
5星 · 资源好评率100%
好的,我来为你提供一个Python实现的最长公共子串算法:
```python
def longest_common_substring(a, b):
m = len(a)
n = len(b)
max_len = 0
end = 0
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 1):
if a[i - 1] == b[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
end = i
else:
dp[i][j] = 0
return max_len
a = input()
b = input()
print(longest_common_substring(a, b))
```
以上代码中,我们定义了一个名为longest_common_substring的函数,它接收两个参数a和b,分别表示两个字符串。函数返回a和b的最长公共子串的长度。
在函数内部,我们首先获取a和b的长度m和n。接着定义一个二维数组dp,其中dp[i][j]表示a的前i个字符和b的前j个字符的最长公共子串的长度。我们使用两层循环遍历a和b的每个字符,当a的第i个字符和b的第j个字符相同时,说明我们可以将它们作为最长公共子串的一部分,因此dp[i][j] = dp[i - 1][j - 1] + 1。如果此时dp[i][j]大于之前的最长公共子串长度max_len,那么我们需要更新max_len和end,其中end表示最长公共子串在a中的结束位置。如果a的第i个字符和b的第j个字符不相等,说明我们不能将它们作为最长公共子串的一部分,因此dp[i][j] = 0。
最后,我们输出最长公共子串的长度即可。
阅读全文