找出两个字符串中的最大公共子字符串,如果没有则返回:"Not Find"
时间: 2023-06-19 13:05:11 浏览: 94
以下是 Python 代码实现:
```python
def find_common_substring(s1, s2):
m = len(s1)
n = len(s2)
if m == 0 or n == 0:
return "Not Find"
dp = [[0] * (n+1) for _ in range(m+1)]
max_len = 0
end_index = 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_index = i
else:
dp[i][j] = 0
if max_len == 0:
return "Not Find"
return s1[end_index-max_len:end_index]
# 测试
print(find_common_substring("abcdefg", "bcdef")) # "bcdef"
print(find_common_substring("abcdefg", "xyz")) # "Not Find"
```
算法思路:使用动态规划,dp[i][j] 表示以 s1[i-1] 和 s2[j-1] 结尾的最长公共子串的长度,如果 s1[i-1] == s2[j-1],那么 dp[i][j] = dp[i-1][j-1] + 1,否则 dp[i][j] = 0。同时记录最长公共子串的长度和结束下标,最后返回 s1[end_index-max_len:end_index] 即可。
阅读全文