python-3.x 编写一个程序来检查一个字符串的后缀与另一个字符串的前缀是否重叠

lfapxunr  于 2023-01-10  发布在  Python
关注(0)|答案(3)|浏览(130)
a = input()
b = input()


def longestSubstringFinder(string1, string2):
    answer = ""
    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
                match = ""
    if answer == '':
        return 'No overlapping'
    else:
        return answer

print(longestSubstringFinder(a, b))

在上面的代码中,未获得输入正确错误的预期结果
我的输出:e预期输出:无重叠

mitkmikd

mitkmikd1#

一些问题:

  • else块不应允许内部循环继续:当出现不匹配时,您不应该尝试使用j的更高值进行匹配,而应该退出该循环并尝试使用i的下一个值。因此,else块中需要有break
  • 条件len(match) > len(answer)不足以确定解决方案。进入else块的原因可能是字符不匹配,因此在这种情况下,您不应该更新answer
  • 另一方面,当内部循环正常结束时,answer的更新不会发生,也就是说,当所有被比较的字符都相等并且i + j < len1总是true时,这种情况会发生在第二个输入字符串是第一个字符串的后缀时,所以你必须在其他地方更新answer,所以你也会捕捉到这种情况。

以下是对代码的更正,用于处理这些问题:

def longestSubstringFinder(string1, string2):
    answer = ""
    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]
                # Move the assignment to answer here, and add condition that
                #  this was the last character of string1:
                if i + j == len1 - 1 and len(match) > len(answer): answer = match
            else:
                break  # Necessary!
    if answer == '':
        return 'No overlapping'
    else:
        return answer

通过使用字符串切片,并比较这些切片而不是单个字符,可以使代码更短、运行更快。

tzdcorbm

tzdcorbm2#

使用RegEX,你可以用更少的代码行来完成它。我假设你是Python的初学者。如果你是,那么请学习这种类型代码的RegEX和列表理解。

import re
str1, str2 = input(), input()

def longestSubstringFinder(string1, string2):
    
    list_of_subsets = [str1.replace(str1[:i], '') for i in range(len(str1))]

    intersect = [re.search('^'+slc, str2).group() for slc in list_of_subsets if re.search('^'+slc, str2)]

    if len(intersect) == 0:
        return 'No overlapping'
    else:
        return intersect[0]

print(longestSubstringFinder(str1, str2))
lpwwtiir

lpwwtiir3#

a = str(input())
b = str(input())
g=len(a)-1
prefix = "No overlapping"
for i in range(len(a)):
    if a[(g-i):] == b[:i+1]:
        prefix = b[:i+1]
print(prefix)

相关问题