📌  相关文章
📜  国际空间研究组织 | ISRO CS 2017 |问题 26(1)

📅  最后修改于: 2023-12-03 15:37:15.597000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2017 |问题 26

这个问题是ISRO CS 2017考试中的一道编程题,要求编写一个程序来查找一组字符串中最长的匹配子串。如果有多个最长匹配子串,则输出第一个。

问题描述

给定一个字符串数组,编写程序查找其中最长的匹配子串。如果有多个最长匹配子串,则输出第一个。

输入格式:

第一行为字符串数组中的字符串数量n。

接下来的n行每行一个字符串。

输出格式:

一个字符串,表示最长匹配子串。

示例:

输入:

5

abcdefg

efghijk

cdefghijklmnopqrstuvwxyz

abcdefghijklmnopqrstuvwxyz

ghijklmnopqrstuvwxyzabcdef

输出:

cdefghijklmnopqrstuvwxyz

解题思路

可以使用python的字符串模块提供的方法来匹配字符串:find和index。

  • index() 方法检测字符串中是否包含子字符串 str ,如果指定开始和结束位置,则在指定范围内检查。如果包含子字符串返回开始的索引值,否则抛出异常。
  • find() 方法检测字符串中是否包含子字符串 str ,如果包含子字符串则返回开始的索引值,否则返回-1。

可以将第一个字符串的所有子串分别与其他的字符串进行匹配,找到最长的匹配子串即可。

代码实现

下面是python的实现代码,实现方式有多种,可以根据自己的习惯进行修改。

def longest_common_substring(s):
    """
    找到一组字符串中的最长匹配子串
    """
    n = len(s)
    if n < 2:
        return s[0]

    # 字符串最小长度
    min_len = min(len(i) for i in s)

    # 查找最长匹配子串
    res = ""
    for i in range(min_len):
        for j in range(i+1, min_len+1):
            if all(s[0][i:j] in m for m in s[1:]):
                if len(s[0][i:j]) > len(res):
                    res = s[0][i:j]

    return res


if __name__ == "__main__":
    n = int(input("请输入字符串数量:"))
    s = []
    for i in range(n):
        s.append(input())

    res = longest_common_substring(s)
    print("最长匹配子串是:{}".format(res))

以上实现只是一种思路,可以根据具体需求选择不同的算法以及数据结构实现。