输入两个字符串,要求输出最长的公共子串。
时间: 2023-10-09 15:09:13 浏览: 168
求两个字符串的最长公共字串
好的,您的问题是输入两个字符串,要求输出最长的公共子串。以下是一个可行的解决方案。
算法思路:
1. 定义一个二维数组 dp,用于记录两个字符串中每个字符对应的最长公共子串长度。
2. 初始化 dp 中第一行和第一列的元素,因为一个字符串和空字符串的最长公共子串为 0。
3. 从第二行第二列开始,逐个比较两个字符串中的字符,如果相同,则 dp[i][j] = dp[i-1][j-1] + 1,即在上一个字符对应的最长公共子串基础上+1;否则,dp[i][j] = 0,表示当前位置对应的字符不在最长公共子串中。
4. 遍历 dp 数组,找出最长公共子串对应的位置和长度。
代码实现:
```python
def findLongestCommonSubstring(s1, s2):
m, n = len(s1), len(s2)
dp = [[0 for j in range(n+1)] for i 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 s1[i-1] == s2[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
else:
dp[i][j] = 0
return s1[end_pos-max_len:end_pos], max_len
```
使用样例:
```python
s1 = "abcdef"
s2 = "defgab"
print(findLongestCommonSubstring(s1, s2)) # ("def", 3)
```
希望我的回答可以帮到您,如有其他问题,请随时提出。
阅读全文