【发布时间】:2018-10-17 18:31:50
【问题描述】:
Brace expansion 接受一个模式并扩展它。例如:
sp{el,il,al}l
扩展到:
spell spill spall
是否有一种算法(可能使用 JavaScript 实现)以最小化构造字符串的方式进行反向操作?
即,接受一个数组[spell spill spall]并返回一个字符串"sp{e,i,a}ll"
【问题讨论】:
-
为什么不
{spell,spill,spall}?{s}{p}{e,i,a}{l}{l}呢{spe,spi,spa}{ll}呢?sp{e,i,a}ll呢?我认为识别字符串数组中的常见模式并使用这种外壳扩展形式搜索此类字符串中不常见模式的“最佳”(最佳方式?以什么方式?)表示,这是一个非常广泛的主题。你试过什么? -
好点,我已经更新了问题以指示最小的结果字符串作为优化目标。我目前尝试创建一个扩展器,然后在字符串中以相似的深度暴力破解字符组,但是运行时会随着更长的字符串爆炸。
-
您可能可以创建a trie(是的,使用“i”)以更快地找到匹配的前缀。您也可以对反向字符串执行相同的操作,以更快地找到匹配的后缀。这将减少求职者的工作量。
-
还应注意,花括号添加一个字符(左花括号),而花括号中的每个替代字符都会添加另一个字符(紧随其后的字符,逗号或右花括号)。这可用于查找结果的潜在部分的长度,而无需浪费时间创建一堆中间字符串并获取它们的长度。
-
您接受的答案不适用于您在问题中提供的示例
[spell spill spall]。
标签: arrays shell brace-expansion