【问题标题】:Parent string of two given strings两个给定字符串的父字符串
【发布时间】:2014-12-04 12:32:23
【问题描述】:

给定 2 个字符串,我们必须找到一个长度最小的字符串,使得给定的字符串是该字符串的子序列。换句话说,我们需要找到一个字符串,以便删除某些字符会产生给定的字符串。想着蛮力和LCS,但没有成功。

12345 和 11234 应该导致 112345 WWA 和 WWS 都有答案 WWAS

LCS 的内存效率非常低(DP 之一)并且蛮力只是幼稚。我该怎么办?

【问题讨论】:

    标签: c++ string lcs subsequence


    【解决方案1】:

    也许您可以使用Needleman-Wunsch 和高错配惩罚进行全局对齐,以更喜欢插入缺失。最后,通过从匹配位置获取字母,然后从任一插入的字母中获取一个字母,将对齐方式合并为“父字符串”,例如:

    WW-A
    ||  
    WWS-
    
    WWSA
    

    或者:

    -12345
     ||||
    11234-
    
    112345
    

    内存是 O(nm),但 modification 会将其缩小到 O(min(n,m))

    【讨论】:

      【解决方案2】:

      标准库中有一个定义明确的算法可以满足您的目的。

      set_union ();
      

      条件是您的输入范围必须排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多