python3 從給定的兩個字符串中找出長度最大的公共子串

介紹

該函數(shù)可以在給定的字符串str1和str2里找出并返回長度最大的公共子串。詳細信息在源碼里有說明。源碼如下:

def getMaxLenSameSubStr(str1, str2, isLower=False):
    # 說明
    # 該函數(shù)是在給定的兩個字符串str1和str2中找出長度最長的相同的子串
    # str1和str2分別為給定的兩個字符串
    # isLower標(biāo)記是否區(qū)分大小寫,F(xiàn)alse不區(qū)分,True區(qū)分,默認(rèn)為False
    # 返回結(jié)果為字典格式:{maxLen: [maxSub1, maxSub2, maxSub3, ...]}
    # 沒有公共子串的結(jié)果為:{0: []}

    # 如果傳參不是字符串類型,強制轉(zhuǎn)換,并將短字符串賦值給str1
    str1 = str(str1)
    str2 = str(str2)
    if not str1 or not str2:
        return {0:[]}
    if len(str1) > len(str2):
        str1, str2 = str2, str1

    # 是否區(qū)分大小寫
    if isLower:
        str1, str2 = str1.lower(), str2.lower()

    # 如果短字符串是長字符串的子串,直接返回短字符串
    sameSubStrDict = {}
    if str1 in str2:
        sameSubStrDict[len(str1)] = [str1]
        return sameSubStrDict
    shortStrLen = len(str1)

    # 處理短字符串并判斷短字符串的子串是否在長字符串中存在
    sameSubStrDict[0] = []
    for i in range(0, shortStrLen+1):
        for j in range(0, i-1): # 去掉單字符的情況
            subStr = str1[j:i]
            if subStr in str2:
                # 如果已存在,添加到對應(yīng)的字典value的列表中
                if len(subStr) in sameSubStrDict.keys():
                    sameSubStrDict[len(subStr)].append(subStr)
                else:
                    sameSubStrDict[len(subStr)] = [subStr]

    # 處理返回結(jié)果
    res = {}
    maxLen = max(list(sameSubStrDict.keys()))
    res[maxLen] = sameSubStrDict[maxLen]
    return res

調(diào)用及結(jié)果

# 調(diào)用
if __name__ == '__main__':
    a = 'test'
    b = 'test'
    c = 'test'
    d = 'aatestbbtesthhh'
    e = 'gggTest001'
    f = 'test'
    g = 'gggTest001'
    h = 'test'
    i = ''
    j = 'test'
    k = 'abc'
    l = 'test'
    print('結(jié)果1:%s' %(getMaxLenSameSubStr(a, b), ))
    print('結(jié)果2:%s' %(getMaxLenSameSubStr(c, d), ))
    print('結(jié)果3:%s' %(getMaxLenSameSubStr(e, f), ))
    print('結(jié)果4:%s' %(getMaxLenSameSubStr(g, h, isLower=True), ))
    print('結(jié)果5:%s' %(getMaxLenSameSubStr(i, j), ))
    print('結(jié)果6:%s' %(getMaxLenSameSubStr(k, l), ))

結(jié)果
結(jié)果1:{4: ['test']}
結(jié)果2:{4: ['test']}
結(jié)果3:{3: ['est']}
結(jié)果4:{4: ['test']}
結(jié)果5:{0: []}
結(jié)果6:{0: []}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容