📜  在两个字符串中查找公共字符串 python (1)

📅  最后修改于: 2023-12-03 15:23:28.534000             🧑  作者: Mango

在两个字符串中查找公共字符串 Python

在开发软件时,有时需要从两个字符串中查找公共字符串。Python中有多种方法可以实现这个目的。

方法一:利用set交集

可以将一个字符串转换成一个set集合,再利用set对象的&操作符求交集。具体实现如下:

str1 = "hello world"
str2 = "world in python"
common = set(str1) & set(str2)

这种方法比较简单,但是没有考虑到重复字符的情况。

方法二:暴力枚举

可以使用两重循环来枚举所有可能的子串并判断是否在两个字符串中同时出现。具体实现如下:

def find_common_str(str1, str2):
    common = set()
    for i in range(len(str1)):
        for j in range(i+1, len(str1)+1):
            if str1[i:j] in str2:
                common.add(str1[i:j])
    return common

str1 = "hello world"
str2 = "world in python"
common = find_common_str(str1, str2)

这种方法可以处理重复字符的情况,但是时间复杂度较高。

方法三:动态规划

可以将两个字符串转换成一个二维矩阵,每个元素表示以该位置为结尾的子串是否在两个字符串中同时出现。由于公共子串必须是连续的,因此可以使用动态规划来计算。具体实现如下:

def find_common_str(str1, str2):
    common = set()
    m, n = len(str1), len(str2)
    dp = [[0] * n for _ in range(m)]
    for i in range(m):
        for j in range(n):
            if str1[i] == str2[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] > len(common):
                    common = set()
                    common.add(str1[i-dp[i][j]+1:i+1])
                elif dp[i][j] == len(common):
                    common.add(str1[i-dp[i][j]+1:i+1])
    return common

str1 = "hello world"
str2 = "world in python"
common = find_common_str(str1, str2)

这种方法时间复杂度较低,但是需要额外的空间来存储计算结果。

以上是三种方法用Python语言实现在两个字符串中查找公共字符串的方法,根据需要选择合适的方法。