查找常规字符串前缀
我有 4 字符串:
我想找到这些行的一般前缀,即
.
如何找到它?
通常我由分隔符共享字符串
并将其放在另一个清单中,依此类推。
有没有更好的方法来做呢?
"h:/a/b/c"
"h:/a/b/d"
"h:/a/b/e"
"h:/a/c"
我想找到这些行的一般前缀,即
"h:/a"
.
如何找到它?
通常我由分隔符共享字符串
'/'
并将其放在另一个清单中,依此类推。
有没有更好的方法来做呢?
没有找到相关结果
已邀请:
15 个回复
奔跑吧少年
赞同来自:
从
</ienumerable<t></t></ienumerable<t>
董宝中
赞同来自:
龙天
赞同来自:
有点 /伪码/
喜特乐
赞同来自:
卫东
赞同来自:
http://en.wikipedia.org/wiki/L ... oblem
/虽然它是一个小小的案例,因为你似乎只关心前缀/. 在平台上 .NET 没有图书馆实现您可以直接导致的算法,但在此处连接的文章,列通过关于您自己的方式的步骤包装。
卫东
赞同来自:
http://en.wikipedia.org/wiki/Trie
Tri. /.
它用于使用前缀执行索引字符串。 这堂课有 O /1/ 录制和读取结束节点。 搜索前缀性能是相等的 O/log n/, 但是,前缀的结果数量是相等的 O /1/.
这是模块化测试代码的示例 & 如何使用此类。
欢迎有关如何改进此类课程的任何建议。 :/
</char,></string></char,></string></hashset<string></char,></hashset<string></hashset<string></string></string></char,></char,></char,></char,></char,></char,></char,></char,>
三叔
赞同来自:
https://github.com/fschwiet/Dr ... b586f
</string>
窦买办
赞同来自:
把信超出这封信,而所有其他行就是在同一位置的相同位置收到相同的信件,如果没有巧合。
如果是分隔符,请删除最后一个字符。
龙天
赞同来自:
如果长度超过一个以上的前缀,则会随机返回找到的第一个。 此外,它对寄存器很敏感。 读者可以考虑这些物品中的两项。
</string></string></string>
三叔
赞同来自:
由于它只检查每层一组行,因此它将比通常的前缀程序快一点 /不计算我的低效算法!/. 这是一个口头,但很容易 follow...my 最喜欢的代码类型 ;-/
忽略 'http://' 和 ' https://', 以及登记册。
</string>
裸奔
赞同来自:
UPD:
我还实现了一个并行版本,它将上述方法作为最后一步:
GetCommonPrefixParallel// 与...相比增加了两倍 GetCommonPrefix// 在大量的行中,并且具有大量的线条。 在带有短线的小阵列上 GetCommonPrefix// 它有效好一点。 我在测试 MacBook Pro Retina 13".
</string></string></string>
莫问
赞同来自:
三叔
赞同来自:
首先,我们知道最长的常见前缀不能长于最短的元素。 因此,取得最短并从中获取符号,而所有其他线条在相同位置具有相同的符号。 在极端情况下,我们从最短元素中取出所有字符。
当短元素迭代时,搜索索引不会给出任何异常。
其他 /最糟糕的,但仍有趣/ 解决这个问题的方法 LINQ 是如下:
samples.Aggregate/samples.Min//, /current, next/ => new string/current.TakeWhile//c,i/ => next[i] == c/.ToArray// //;
此方法有效,创建 commonPrefix 并将其与每个元素逐一的比较。 在每个比较中 commonPrefix 要么持续或减少。 在第一次迭代的电流中 - 这是最小元素,但每个后续迭代 - 这是最好的 commonPrefix, 到目前为止发现。 将其视为基于深度的解决方案,而第一个是基于宽度的解决方案。
通过将样品的长度分选,可以提高这种类型的解决方案,使得最短的元件是比较最短的元件。
然而,这种类型的决定不能比第一个更好。 最多,这与第一个决定一样好。 但其他,他会做额外的工作,找到临时 commonPrefixes, 这比必要的时间长。
卫东
赞同来自:
解释:
它有效,通过角色
直到
其他线条具有相同的符号
在索引中
.
分离签名
和
params String[]
它保证将提供至少一条线路,并且在执行期间不需要检查。
如果仅使用一个字符串调用该函数,则返回输入数据 /线 - 这是她自己的前缀/.
更便宜
前缀长度和退款
, 使用什么重新收集列出的字符
或者
窦买办
赞同来自: