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

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']但我希望['AHAM', 'MAD']作为输出。 怎么做到的?

#1楼 票数:0 已采纳

  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']

#2楼 票数:0

这是一个直截了当的蛮力解决方案:

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']

#3楼 票数:0

你可以试试这个:

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']

  ask by Rajiv translate from so

未解决问题?本站智能推荐:

4回复

查找由两个字符串共享的所有n字长子字符串的最大长度

我正在努力生成一个Python脚本,它可以找到由两个字符串共享的所有n字长子字符串的(尽可能长)长度,忽略尾随标点符号。 鉴于两个字符串: “这是一个示例字符串” “这也是一个示例字符串” 我希望脚本能够识别这些字符串是否有一个共同的2个单词的序列(“this is”),后跟一
3回复

Python:比较两个字符串从一端保留差异

初学者在这里,尽管有些相似,但尚未找到答案。 如果我有两个字符串: 如何获得'jk'作为输出? 'abcdefghi'必须先匹配,然后我才能得到区别。 接下来的第二个问题(如果我得到第一个问题,我可能可以弄清楚)是s2 = 'cdefghi'并且我仍然希望输出仅为'jk'而不是'a
9回复

如何在Python中获取一个字符串的所有连续子字符串?

这是我的代码,但我想要一个更好的解决方案,你如何看待这个问题?
1回复

使用python在多个字符串中查找和计算子字符串的实例

我在 python 中有一个带有多个子查询的 sql 查询。 所以设置是一个更大的字符串中的多个子字符串。 我想检查子字符串中字符串的实例数。 比我看到的更多参与并感谢帮助。 设置成这样—— 我想计算qry_1, qry_2, qry_3内的ID实例。 我认为会利用re.findall然后进行子字符
1回复

用于查找字符串中一组子字符串的所有位置的优化

我在 Python 中有一组子字符串,并且想在字符串中找到每个出现的子字符串。 例如# inputsneedles = {'love', 'hot', 'dogs'}haystack = "I love hot dogs; hot dogs are delicious."# outputindexe
4回复

在其他字符串列表中查找一个字符串

我正在尝试从原始列表创建一个新列表,但是遇到了一些困难。 列表如下: list1 = [training, bicycle, working, carrying, bite, eat] 我的新清单ing旨在仅对其中包含ing的单词进行排序,因此新清单应如下所示[training, wor
2回复

python在字符串中查找子字符串

我正在尝试在python内部的字符串中查找子字符串的出现次数。 但是我需要我的搜索非常具体。 在搜索子字符串之前,我删除了所有标点符号: myString.translate(无,字符串。标点符号) 现在,我搜索子字符串。 如果要搜索子字符串“ hello bob”,并且要搜索字符
5回复

当第一个子字符串后有空格时,在Python中查找两个子字符串之间的字符串

虽然 StackOverflow 上有几篇与此类似的帖子,但它们都没有涉及目标字符串在子字符串之一后一个空格的情况。 我有以下字符串(example_string): <insert_randomletters>[?] I want this string.Reduced<inse