我试图在 ruby 的字符串数组中找到所有常见的子序列,而不仅仅是最长的单个子序列。
这意味着如果输入是
[“aaaF 你好”,“aaaG 你好”,“aaaH 你好”]
预期的输出是
[“aaa”,“你好”]
我一直在搞乱最长的单子序列算法,但不知道如何获得适当的输出。大多数方法的问题是它们在最终数组中还有其他元素,例如“a”、“aa”、“h”、“he”、“hel”、“hell”
我试图在 ruby 的字符串数组中找到所有常见的子序列,而不仅仅是最长的单个子序列。
这意味着如果输入是
[“aaaF 你好”,“aaaG 你好”,“aaaH 你好”]
预期的输出是
[“aaa”,“你好”]
我一直在搞乱最长的单子序列算法,但不知道如何获得适当的输出。大多数方法的问题是它们在最终数组中还有其他元素,例如“a”、“aa”、“h”、“he”、“hel”、“hell”
好吧,像“a”和“aa”这些较小的子序列是常见的子序列,所以这不会是不正确的。
如果你真的只想要最长的公共子序列(即那些不包含在任何其他公共子序列中的子序列),你需要做的是检查这些子序列是否是更大公共子序列的一部分,如果是,则丢弃它们。
这可以通过(在伪代码中)完成
finalsubsequences = copy(subsequences);
for(subseq in subsequences) {
for(subseq2 in subsequences) {
if(subseq2.indexOf(subseq) != false)
// subseq contains subseq2, thus discard subseq2
finalsubsequences.remove(subseq2);
}
}
祝你好运!
继承人python/pseudo中的一些代码:
A = String["aaaf hello","aaag hello"]
def find(s):
res = []
for sub in [s[1:],s[:-1]]
if sub in all items in A:
res.append(sub)
else:
res.append(find(sub))
return res