我试图在ruby 的字符串数组中找到所有常见的子序列,而不仅仅是最长的单个子序列。
这意味着如果输入是
[“aaaF hello”,“aaaG hello”,“aaaH hello”]
预期输出
[“aaa”,“你好”]
我一直在搞乱最长的单个子序列算法,但无法弄清楚如何获得适当的输出。大多数方法的问题是它们在最终数组中有其他元素,如“a”,“aa”,“h”,“he”,“hel”,“hell”
答案 0 :(得分:1)
嗯,像“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);
}
}
祝你好运!
答案 1 :(得分:0)
这是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