【发布时间】:2019-03-08 12:49:37
【问题描述】:
假设我们有 n 个三个字母的子字符串。可以通过连接这些 N 个子字符串来制作长度为 n+2 的字符串(其中重叠的字母只写一次)。因此该字符串必须具有 a1,a2,a3,a4... 的形式...
因此,仅允许在两个相邻位置重叠的两个子字符串链接: 'yxz' + 'xzw' = 'yxzw' ,但例如不允许使用 'yxz' + 'aby'。
示例 1:n = 3 个三个字母的子字符串是 'abc','cde','bcd' 输出:YES .因为 'abc' + 'bcd'+ 'cde' = 'abcde' 是 n+2 = 5 个字母的有效字符串。
示例 2:n = 3 个三个字母的子字符串是 'abc','bca','bcd' 输出:NO。因为不可能将它们全部连接起来。
我怎样才能找到一个有效的算法来解决这个问题?使用 O(n!) 尝试所有可能的组合花费的时间太长了
【问题讨论】:
-
我认为你可以使用 2 张地图。
n可以有多大? -
@vivek_23 n的最大值约为10^4
-
看起来您需要为此使用回溯。因为在发生冲突的情况下,我们无法保证哪一个会导致我们找到消耗所有子字符串的解决方案。另外,单个子串可以重复吗?
-
为什么
Example 2没有解决方案?我看到bca+abc=>bcabc,来自一组 3 个字符串的 5 个字符。我们必须使用集合中的所有字符串吗?必须按顺序使用吗? -
@Prune 我的印象是它们必须完全重叠在两个字符上(结束 + 开始)。因此,OP 的示例是 'yxz' + 'xzw' = 'yxzw'