函数查找两个字符串中的所有公共子字符串,但未给出正确的输出

2024-09-30 20:36:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下函数查找两个字符串之间的所有公共子字符串:

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)

所以当我做substringFinder("ALISSA", "ALYSSA")时,给出['AL', 'SSA'],这很好。但是当我做substringFinder("AHAMMAD", "AHAMAD")时,它只给出输出['AHAM'],但我希望{}作为输出。怎么弄到的?在


Tags: 字符串answerinforlenifmatchrange
3条回答

你可以试试这个:

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))

输出:

^{pr2}$

下面是一个简单的暴力解决方案:

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']
  1. 不要break
  2. 在添加字符串之前,请检查字符串的长度,以避免出现"A"
  3. return函数结果而不是在函数内部打印

这样:

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")

结果:['AHAM', 'MAD']

相关问题 更多 >