用python编写输入两个字符串,获取两个字符串中公共的子字符串。(注意考虑字符串的长度
时间: 2024-01-24 07:16:53 浏览: 40
可以通过暴力枚举的方式来求解两个字符串中的公共子串,时间复杂度为 $O(n^3)$。以下是一个简单的 Python 实现:
```python
def get_common_substring(str1, str2):
max_len = 0
for i in range(len(str1)):
for j in range(len(str2)):
k = 0
while i + k < len(str1) and j + k < len(str2) and str1[i + k] == str2[j + k]:
k += 1
if k > max_len:
max_len = k
substring = str1[i:i+max_len]
return substring if max_len > 0 else None
```
该函数接受两个字符串 `str1` 和 `str2` 作为参数,返回两个字符串中的最长公共子串。如果不存在公共子串,则返回 `None`。
这个实现并不是最优的,如果需要更高效的算法可以考虑使用后缀数组或者动态规划等算法。
相关问题
输入两个字符串,获取两个字符串中公共的子字符串。
可以使用动态规划算法来解决这个问题。具体步骤如下:
1. 定义一个二维数组dp,其中dp[i][j]表示以第一个字符串的第i个字符和第二个字符串的第j个字符结尾的公共子字符串的长度。
2. 初始化dp数组,将第一行和第一列都赋值为0。
3. 遍历两个字符串,如果第一个字符串的第i个字符和第二个字符串的第j个字符相等,则dp[i][j] = dp[i-1][j-1] + 1,否则dp[i][j] = 0。
4. 在遍历的过程中记录最长的公共子字符串的长度和结束位置。
5. 根据最长公共子字符串的长度和结束位置,可以得到公共子字符串。
以下是代码实现:
```python
def find_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
else:
dp[i][j] = 0
return str1[end_pos-max_len:end_pos]
```
例如,对于输入的字符串"abcdefg"和"bcdefgh",输出为"bcdefg"。
python 代表 输入两个字符串,从第一个字符串中删除第二个字符串中所有字符
以下是 Python 代码实现:
```python
def delete_chars(str1, str2):
# 将第二个字符串中的字符转换成集合
chars_set = set(str2)
# 初始化结果字符串
result = ""
# 遍历第一个字符串中的字符
for char in str1:
# 如果该字符不在第二个字符串中,则添加到结果字符串中
if char not in chars_set:
result += char
return result
```
这个函数的输入为两个字符串,返回值为删除第二个字符串中所有字符后的第一个字符串。具体实现过程为,将第二个字符串中的字符转换成集合,遍历第一个字符串中的字符,如果该字符不在第二个字符串中,则添加到结果字符串中。最终返回结果字符串。