python输入两个字符串的输出它们公共的最长子串_python3 从给定的两个字符串中找出长度最大的公共子串...

该博客介绍了一个Python函数,用于在给定的两个字符串中查找并返回最长公共子串。函数考虑了是否区分大小写,并通过示例展示了其使用方法和不同情况下的输出结果。
摘要由CSDN通过智能技术生成

介绍

该函数可以在给定的字符串str1和str2里找出并返回长度最大的公共子串。详细信息在源码里有说明。源码如下:

def getMaxLenSameSubStr(str1, str2, isLower=False):

# 说明

# 该函数是在给定的两个字符串str1和str2中找出长度最长的相同的子串

# str1和str2分别为给定的两个字符串

# isLower标记是否区分大小写,False不区分,True区分,默认为False

# 返回结果为字典格式:{maxLen: [maxSub1, maxSub2, maxSub3, ...]}

# 没有公共子串的结果为:{0: []}

# 如果传参不是字符串类型,强制转换,并将短字符串赋值给str1

str1 = str(str1)

str2 = str(str2)

if not str1 or not str2:

return {0:[]}

if len(str1) > len(str2):

str1, str2 = str2, str1

# 是否区分大小写

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:

# 如果已存在,添加到对应的字典value的列表中

if len(subStr) in sameSubStrDict.keys():

sameSubStrDict[len(subStr)].append(subStr)

else:

sameSubStrDict[len(subStr)] = [subStr]

# 处理返回结果

res = {}

maxLen = max(list(sameSubStrDict.keys()))

res[maxLen] = sameSubStrDict[maxLen]

return res

调用及结果

# 调用

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('结果1:%s' %(getMaxLenSameSubStr(a, b), ))

print('结果2:%s' %(getMaxLenSameSubStr(c, d), ))

print('结果3:%s' %(getMaxLenSameSubStr(e, f), ))

print('结果4:%s' %(getMaxLenSameSubStr(g, h, isLower=True), ))

print('结果5:%s' %(getMaxLenSameSubStr(i, j), ))

print('结果6:%s' %(getMaxLenSameSubStr(k, l), ))

结果

结果1:{4: ['test']}

结果2:{4: ['test']}

结果3:{3: ['est']}

结果4:{4: ['test']}

结果5:{0: []}

结果6:{0: []}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值