为给定的字符串生成最短的NOT子字符串

时间:2015-11-30 04:49:49

标签: string algorithm language-agnostic mime boundary

我正在处理MIME消息生成代码,并且我希望在流模式下为任何给定输入生成尽可能小的boundaries,即使是未知长度。

现在我最终得到了基于随机生成器的足够好的解决方案。基本上我生成32个Base64符号的随机字符串,并尝试在其中找到不是MIME消息体的子字符串的最短子字符串。

这不是完美的解决方案,因为:

  1. 边界并不总是最短的。对于非常简单的示例:对于仅alpha文本,边界可能只是一个数字,但生成的边界材料只能包含alpha。

  2. 每次运行应用程序时,我都需要随机生成器和唯一种子。理想情况下,确定性算法更好。

  3. 这就是我想知道的。保持流算法属性,固定内存量,确定性并生成理想的最短边界是可能的吗?或者我们只能通过权衡获得一些属性?

1 个答案:

答案 0 :(得分:1)

所有边界都以--开头,并且位于单独的一行。您可以使用它来创建所有可能的"类边界"的列表。正文中的单词,然后创建一个独特的单词(例如lexicographically)。

此外,假设你的部分少于26个,你可以简单地使用单个字母,如果你想要尽可能短的"边界。在这种情况下,扫描可以使用正则表达式完成:

^--([a-z])$

这(在多行上下文中)将匹配所有单个字母"类似上下文"电子邮件正文中的令牌。

假设您将匹配值列表放在哈希集中,那么您可以使用类似

的内容生成令牌
('a'...'z').where(!tokenHashSet.contains)

以上所有都是伪代码,希望它很清楚。