Python 函数查找两个字符串中未给出正确输出的所有公共子字符串
我使用以下函数查找两个字符串之间的所有公共子字符串:Python 函数查找两个字符串中未给出正确输出的所有公共子字符串,python,string,substring,Python,String,Substring,我使用以下函数查找两个字符串之间的所有公共子字符串: def substringFinder(string1, string2): answer = "" anslist=[] len1, len2 = len(string1), len(string2) for i in range(len1): match = "" for j in range(len2): if (i + j < len1 an
def substringFinder(string1, string2):
answer = ""
anslist=[]
len1, len2 = len(string1), len(string2)
for i in range(len1):
match = ""
for j in range(len2):
if (i + j < len1 and string1[i + j] == string2[j]):
match += string2[j]
j=j+1
else:
#if (len(match) > len(answer)):
answer = match
if answer != '':
anslist.append(answer)
match = ""
if match != '':
anslist.append(match)
break
print(anslist)
def子字符串查找器(string1、string2):
答案=”“
anslist=[]
len1,len2=len(string1),len(string2)
对于范围内的i(len1):
match=“”
对于范围内的j(len2):
如果(i+jlen(回答)):
答案=匹配
如果回答!='':
anslist.append(答案)
match=“”
如果匹配!='':
anslist.append(匹配)
打破
打印(列表)
因此,当我使用substringFinder(“ALISSA”、“ALYSSA”)时,它会给出['AL','SSA']
,这很好。但是当我执行子字符串查找器(“AHAMMAD”、“AHAMAD”)
时,它只提供输出['AHAM']
,但我希望['AHAM',MAD']
作为输出。怎么弄到的
break
“A”
返回函数结果,而不是在函数内部打印
def substringFinder(string1, string2):
answer = ""
anslist=[]
len1, len2 = len(string1), len(string2)
for i in range(len1):
match = ""
for j in range(len2):
if (i + j < len1 and string1[i + j] == string2[j]):
match += string2[j]
else:
#if (len(match) > len(answer)):
answer = match
if answer != '' and len(answer) > 1:
anslist.append(answer)
match = ""
if match != '':
anslist.append(match)
# break
return anslist
print substringFinder("AHAMMAD", "AHAMAD")
def子字符串查找器(string1、string2):
答案=”“
anslist=[]
len1,len2=len(string1),len(string2)
对于范围内的i(len1):
match=“”
对于范围内的j(len2):
如果(i+jlen(回答)):
答案=匹配
如果回答!=''和len(答案)>1:
anslist.append(答案)
match=“”
如果匹配!='':
anslist.append(匹配)
#中断
返回列表
打印子字符串查找器(“AHAMMAD”、“AHAMAD”)
结果:
['AHAM','MAD']
以下是一个简单的暴力解决方案:
In [7]: def substring_finder(s1, s2):
...: matches = []
...: size = len(s1)
...: for i in range(2, size):
...: for j in range(0, size, i):
...: stop = j+i
...: if stop > size:
...: continue
...: sub = s1[j:stop]
...: if sub in s2:
...: matches.append(sub)
...: return matches
...:
In [8]: substring_finder("ALISSA", "ALYSSA")
Out[8]: ['AL', 'SA', 'SSA']
In [9]: substring_finder("AHAMMAD", "AHAMAD")
Out[9]: ['AH', 'AM', 'MA', 'AHA', 'AHAM']
您可以尝试以下方法:
def substrings(s1, s2):
final = [s1[i:b+1] for i in range(len(s1)) for b in range(len(s1))]
return [i for i in final if i in s1 and i in s2 and len(i) > 1]
s1, s2 = "ALISSA", "ALYSSA"
print(substrings(s1, s2))
输出:
['AL', 'SS', 'SSA', 'SA']
为什么
['AHAM',AD']
而不是['AHAM',MAD']
?还有,为什么要添加中断符
?所以对于ALISSA和ALYSSA,正如我提到的,我想要['AL',SSA']。i、 e,查找出现不匹配字符('i'和'Y')的每个部分的最长匹配。对于AHAMMAD和AHAMAD,我想要['AHAM','MAD'],第一个字符串中的不匹配字符是'M'。Rajiv是的,我不确定您的要求是什么。显然,您可以过滤以上内容以满足要求。因此,对于ALISSA和ALYSSA,正如我所提到的,我想要['AL','SSA']。i、 e,查找出现不匹配字符('i'和'Y')的每个部分的最长匹配。对于AHAMMAD&AHAMAD,我想要['AHAM','MAD'],第一个字符串中的非匹配字符是'M'。非常感谢,这就是我要找的!