算法:是否可以形成有效的字符串

时间:2019-03-08 12:49:37

标签: algorithm substring

假设我们有n个三个字母子字符串。通过将N个子字符串连接起来,可以构成一个长度为n + 2的字符串(将重叠的字母仅写入一次)。因此,此字符串的格式必须为a1,a2,a3,a4 ...

因此,仅当两个子字符串在两个相邻位置重叠时才允许链接它们:'yxz'+'xzw'='yxzw',但是例如不允许'yxz'+'aby'。

示例1:n = 3个三个字母的子字符串为'abc','cde','bcd'输出:是 。因为'abc'+'bcd'+'cde'='abcde'是具有n + 2 = 5个字母的有效字符串。

示例2:n = 3个三个字母子字符串为'abc','bca','bcd'输出:否。因为不可能将它们全部串联起来。

如何找到解决此问题的有效算法?尝试使用O(n!)

进行所有可能的组合都花费太长时间

1 个答案:

答案 0 :(得分:3)

解决此类问题的一种流行方法是构建输入序列的重叠图,其顶点是您的三元组,并且两个三元组之间的弧线a_i -> a_j表示{ {1}}是a_i的前两个字母;然后在结果图中找到Hamiltonian path

单纯的搜索当然不会胜过您提到的详尽搜索,但是链接的Wikipedia文章为如何更有效地做到这一点提供了一些线索。