n个字符串的最长公共子串算法

时间:2015-12-22 17:27:14

标签: python algorithm data-structures

我有以下算法来查找两个字符串之间最长的公共子字符串,我想修改它以便它可以使用n个字符串。我不确定此函数最多会占用多少个字符串,但上限可能大约为4-6。

这是我的基本算法。

def lcs(s1, s2):
    m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))]
    longest, x_longest = 0, 0
    for x in xrange(1, 1 + len(s1)):
        for y in xrange(1, 1 + len(s2)):
            if s1[x - 1] == s2[y - 1]:
                m[x][y] = m[x - 1][y - 1] + 1
                if m[x][y] > longest:
                    longest = m[x][y]
                    x_longest = x
            else:
                m[x][y] = 0
    return s1[x_longest - longest: x_longest]

1 个答案:

答案 0 :(得分:0)

如果s1和s2是您的字符串,请将其替换为:

    public ConcatPlugin(string unsecureConfig, string secureConfig)
    {
        _secureConfig = secureConfig;
        _unsecureConfig = unsecureConfig;
    }
    #endregion
    public void Execute(IServiceProvider serviceProvider)
    {
        ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
        IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
        IOrganizationService service = factory.CreateOrganizationService(context.UserId);

        try
        {
            Entity entity = (Entity)context.InputParameters["Target"];

            //TODO: Do stuff




      }
        catch (Exception e)
        {
            throw new InvalidPluginExecutionException(e.Message);
        }
    }
}

现在你可以调用lcs(s1,s2,s3,s4)

并且在函数内部,s将是一个元组,其中包含您传递的元素,在这种情况下,它将是一个包含4个字符串的元组。您也可以将一个字符串列表传递给该函数,并忘记* args。