【问题标题】:How to make unique strings shorter and keep uniqueness如何使唯一的字符串更短并保持唯一性
【发布时间】:2018-06-10 12:18:07
【问题描述】:

我有 4 个字节的字符串。

每个字符串都是唯一的。

是否可以剪切每个字符串(仅占用 2 个字节)并保留唯一的子字符串?怎么样?

我不需要超过 2^16 个字符串作为输出

【问题讨论】:

  • 您使用的是什么技术?请将其添加为标签。
  • @YassinHajaj - 我添加了更多标签
  • 仅当原字符串中的每个字符都不允许取全范围的可能值时。
  • @Mat - 不,我不需要超过 2^16 个字符串作为输出。添加了说明。
  • 如果我们更多地了解您的字符串的结构和数量(仅字母数字?仅 alpha?十六进制?有模式吗?它们是否属于逻辑组),您可能会得到更明智的答案?)

标签: c++ linux random


【解决方案1】:

一种快速而简单的方法是将字符串映射到单调递增的标识符或代码

// std::uint16_t is a 2-byte integral type
std::map<String, std::uint16_t> stringsToCodes;
std::map<std::uint16_t, String> codesToStrings;
std::uint16_t counter = 0;
for (auto& str : all_your_strings) {
  stringsToCodes[str] = counter;
  codesToStrings[counter] = str;
  counter++;
}

然后您可以使用stringsToCodescodesToStrings 在两者之间进行转换。

如果您对字符串有更合理的方案,可能会有比这更好的选择。此方法对存储字符串的方式的变化很敏感,可能并不理想。

【讨论】:

    猜你喜欢
    • 2019-03-11
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2011-04-06
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多