【发布时间】:2014-05-24 22:54:03
【问题描述】:
我一直在尝试使用分隔符序列化一些数据并遇到问题。
如果它包含分隔符,我希望能够快速找到不是给定字符串的子字符串的字符串,以便我可以将其用作分隔符。
如果我不关心大小,找到它的最快方法是检查给定字符串中的一个字符,然后选择一个不同的字符,创建一个给定字符串的长度仅为该字符的字符串。
可能有一种方法可以进行某种检查,首先测试中间字符,然后测试第一段和最后一段的中间......但我没有看到明确的算法。
我目前的想法是相当快但不是最优的 使用所有字符作为键和 0 作为计数初始化哈希 使用哈希值将字符串字符读取为字节。
遍历键找到最少的字符数。如果我发现一个字符为零的字符,则立即停止。
使用该字符数加一作为分隔符。
我相信这是 O(n),尽管显然不是最短的。但是分隔符总是不超过 n/256 + 1 个字符。
我也可以尝试某种基于 trie 的构造,但我不太确定如何实现,那就是 0(n^2) 对吗?
可能会有所帮助。
【问题讨论】:
-
类似问题here有几个答案。
标签: regex string perl substring