问题1:给定两个字符串str1和str2,输出两个字符串的最长公共子串,保证str1和str2的最长公共子串存在且唯一。 要求: (1)数据输入:字符串长度0<|str1|,|str2|≦5000,元素从{0-9,A-Z}随机生成。 (2)数据输出:最长公共子串。
时间: 2024-11-25 17:17:49 浏览: 25
要解决这个问题,我们可以使用动态规划的方法。动态规划通常用于优化具有重叠子问题和最优子结构的问题,如寻找最长公共子序列。对于两个字符串`str1`和`str2`,我们可以通过构建一个二维数组来存储以每个字符结尾的最长公共子串长度。
以下是一个Python实现的示例[^1]:
```python
def longest_common_substring(str1, str2):
m, n = len(str1), len(str2)
dp = [[0] * (n + 1) for _ in range(m + 1)]
max_len, end_pos = 0, 0
for i in range(1, m + 1):
for j in range(1, n + 1):
if str1[i - 1] == str2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
end_pos = i - 1
else:
dp[i][j] = 0
return str1[end_pos - max_len + 1:end_pos + 1]
# 示例
str1 = "ABCDGH"
str2 = "AEDFHR"
result = longest_common_substring(str1, str2)
print(f"最长公共子串: {result}")
```
阅读全文