【问题描述】 最长公共子串,题目描述:a b两个字符串,求a b的最长公共子串长度,输出最长公共子串长度。子串与子序列不同,子串必须是连续的,而子序列可以不连续。 【输入形式】 分两行输入两个字符串 【输出形式】 一行输出长度 【样例输入】 abcccabccsccs abcabcabccs 【样例输出】 6
时间: 2023-12-01 20:04:15 浏览: 68
可以使用动态规划算法求解最长公共子串。具体思路是,使用一个二维数组 `dp` 来表示以 `a[i]` 和 `b[j]` 结尾的最长公共子串长度。即 `dp[i][j]` 表示以 `a[i]` 和 `b[j]` 结尾的最长公共子串长度。如果 `a[i]` 和 `b[j]` 不相等,则 `dp[i][j]` 为 0。如果 `a[i]` 和 `b[j]` 相等,则有 `dp[i][j] = dp[i-1][j-1] + 1`。最终答案即为所有 `dp[i][j]` 中的最大值。
下面是 Python 代码实现:
```python
# 输入两个字符串
a = input().strip()
b = input().strip()
# 初始化二维数组
dp = [[0] * len(b) for _ in range(len(a))]
# 初始化最大长度和对应的位置
max_len = 0
max_pos = (0, 0)
# 遍历字符串,更新 dp 数组
for i in range(len(a)):
for j in range(len(b)):
if a[i] == b[j]:
if i == 0 or j == 0:
dp[i][j] = 1
else:
dp[i][j] = dp[i-1][j-1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
max_pos = (i, j)
# 输出最长公共子串长度
print(max_len)
```
输入样例:
```
abcccabccsccs
abcabcabccs
```
输出样例:
```
6
```
其中,最长公共子串为 `"abcccs"`。
阅读全文